1 什么是Optional类
Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。
2 Optional类的常用方法
- public static Optional of(T value);//创建一个 Optional 实例,value不可为null
Optional<Employee> op = Optional.of(new Employee());
- public static Optional empty();//创建一个空的 Optional 实例,不包含值,不可调用get方法
Optional<Employee> op = Optional.empty();
- public static Optional ofNullable(T value);//若 value 不为 null,创建 Optional 实例,否则创建空实例
//原码
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
- public boolean isPresent();//判断是否包含值
Optional<Employee> op1 = Optional.ofNullable(null);
Optional<Employee> op2 = Optional.ofNullable(new Employee());
if(op1.isPresent()){
System.out.println("op1");
}
if(op2.isPresent()){
System.out.println("op2");
}
//只输出“op2”
- public T orElse(T other);//如果调用对象包含值,返回该值,否则返回other
Optional<Employee> op = Optional.ofNullable(null);
System.out.println(op.orElse(new Employee("李四", 59, 6666.66)).getName());
//输出“李四”
- public T orElseGet(Supplier<? extends T> other);//如果调用对象包含值,返回该值,否则返回 other 获取的值
Optional<Employee> op = Optional.ofNullable(null);
System.out.println(op.orElseGet(() -> new Employee("李四", 59, 6666.66)).getName());
//输出“李四”
- public< U> Optional< U> map(Function<? super T, ? extends U> mapper);//如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
Optional<Employee> op = Optional.of(new Employee("李四", 59, 6666.66));
Optional<String> str = op.map(e -> e.getName());
System.out.println(str.get());
//输出“李四”
- public< U> Optional< U> flatMap(Function<? super T, Optional< U>> mapper);//与 map 类似,要求返回值必须是Optional
Optional<Employee> op = Optional.of(new Employee("李四", 59, 6666.66));
Optional<String> str = op.flatMap(e -> Optional.of(e.getName()));
System.out.println(str.get());
//输出“李四”