Optional类

Java8提供了一个Optional类,它可以看作一个返回值的“容器”,用于更好的表达某个值存在或不存在。Optional类常用于优化空指针处理的代码逻辑。

Optional类使用实例

假设我们有如下这样一段代码逻辑,我们在repository中调用queryComponentByName()方法来查询一个组件,如果查到返回组件对象,查不到则返回null。接下来我们要调用组件的execute()方法,如果上一步没有查到组件,则创建一个默认组件并调用其中的方法。

package com.gacfox.demo;

public class Main {
    public static void main(String[] args) {
        MyRepository repository = new MyRepository();
        Component component = repository.queryComponentByName("DemoComponent");
        if (component != null) {
            component.execute();
        } else {
            Component defaultComponent = new DefaultComponent();
            defaultComponent.execute();
        }
    }
}

显然,在第二步中我们要用if (component != null) { ... }进行判断,然后进行对应处理,还是比较麻烦的,使用Optional能够简化这一逻辑。

MyRepository.java

package com.gacfox.demo;

import java.util.Optional;

public class MyRepository {
    public Optional<Component> queryComponentByName(String name) {
        // 具体查询逻辑 ...
        return Optional.ofNullable(component);
    }
}

Main.java

package com.gacfox.demo;

import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        MyRepository repository = new MyRepository();
        Optional<Component> component = repository.queryComponentByName("DemoComponent");
        component.orElse(new DefaultComponent()).execute();
    }
}

代码中,我们的MyRepository没有直接返回Component对象,而是使用Optional类进行了一步封装。Main.java中取用时,使用了OptionalorElse方法,它封装了如果Optional对象内部为空时就使用参数传入的默认对象的逻辑,简化了代码的编写。

Optional类常用方法

方法 说明
Optional.of(T t) 创建包含对象的Optional实例,t不可为null
Optional.empty() 创建空的Optional实例
Optional.ofNullable(T t) t不为null,创建包含tOptional实例,否则创建空实例(常用)
optional.isPresent() 判断Optional对象中是否包含值
optional.orElse(T t) Optional对象中包含值时返回该值,否则返回t
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap