JDK8新特性之Optional

Optional类

以前对null的处理方式:


public class Test {
    public static void main(String[] args) {
        String userName = "凤姐";
        // String userName = null;
        if (userName != null) {
            System.out.println("用户名为:" + userName);
        } else {
            System.out.println("用户名不存在");
        }
    }
}
//控制台打印:用户名为:凤姐

Optional类介绍
Optional是一个没有子类的工具类,Optional是一个可以为null的容器对象。它的作用主要就是为了解决避免Null检查,防止NullPointerException。
JDK8新特性之Optional_第1张图片
Optional类的创建方式:

Optional.of(T t) : 创建一个 Optional 实例
Optional.empty() : 创建一个空的 Optional 实例
Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例

Optional类的常用方法:

isPresent() : 判断是否包含值,包含值返回true,不包含值返回false
get() : 如果Optional有值则将其返回,否则抛出NoSuchElementException
orElse(T t) : 如果调用对象包含值,返回该值,否则返回参数t
orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值
map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
import java.util.Optional;

public class Test {
    public static void main(String[] args) {
        // Optional userNameO = Optional.of("凤姐");
        // Optional userNameO = Optional.of(null);
        // Optional userNameO = Optional.ofNullable(null);
        Optional<String> userNameO = Optional.empty();
        // isPresent() : 判断是否包含值,包含值返回true,不包含值返回false。
        if (userNameO.isPresent()) {
            // get() : 如果Optional有值则将其返回,否则抛出NoSuchElementException。
            String userName = userNameO.get();
            System.out.println("用户名为:" + userName);
        } else {
            System.out.println("用户名不存在");
        }
    }
}
//控制台输出:用户名不存在
import java.util.Optional;

public class Test {
    public static void main(String[] args) {
        Optional<String> userName0 = Optional.of("张三");
        Optional<String> userName1 = Optional.empty();
        // 如果调用对象包含值,返回该值,否则返回参数t
        System.out.println("用户名为" + userName0.orElse("null"));
        System.out.println("用户名为" + userName1.orElse("null"));

        //如果调用对象包含值,返回该值,否则返回 s 获取的值,public T orElseGet(Supplier other),可用Lambda表达式
        String s1 = userName0.orElseGet(() -> {return "未知用户名";});
        System.out.println("s1 = " + s1);
    }
}
//控制台打印:
用户名为张三
用户名为null
s1 = 张三

Optional是一个可以为null的容器对象!

你可能感兴趣的:(Java)