文章16 | 阅读 6553 | 点赞0
Java8 新增了一个容器类 Optional, 用于表示一个值存在或不存在, 原来只用null 表示值不存在. Optional 的目的是避免空指针异常, 但是笔者并没有如何才能用好它
API 签名 | 方法描述 |
---|---|
public static Optional of(T value) | 创建实例, 参数不能为null |
public static Optional ofNullable(T value) | 创建实例,参数可为null.参数为null, 创建空实例 |
public static Optional empty() | 创建空的optional实例 |
public void ifPresent(Consumer<? super T> consumer) | 判断optional 是否包含对象 |
public T orElse(T other) | 获取optional 包含对象或返回默认对象 |
public T orElseGet(Supplier<? extends T> other) | 和orElse 方法类似, 只是接收函数式接口 |
public T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X | |
publicOptionalmap(Function<? super T, ? extends U> mapper) | 可返回optional 包含对象里的属性, 也可根据不同条件来返回不同值 |
publicOptionalflatMap(Function<? super T, Optional> mapper) | 和map 类似, 只是函数式接口的返回值也需要是optional |
public class TestOptional {
// 使用of 方法创建一个Optional 实例, 但是方法参数不能为空
@Test
public void test_of(){
Optional<String> op = Optional.of("zhangsan");
System.out.println(op.get());
}
@Test
public void test_ofNullable(){
Optional nullOp = Optional.ofNullable(null);
System.out.println(nullOp); // Optional.empty
Optional op = Optional.ofNullable("zhangsan");
System.out.println(op); // Optional[zhangsan]
}
@Test
public void test_empty() {
Optional op = Optional.empty();
System.out.println("optional 是否包含对象:" + op.isPresent()); // optional 是否包含对象:false
}
// 判断optional 是否包含对象, 包含返回true, 否则返回false
@Test
public void test_isPresent(){
Optional op = Optional.empty();
System.out.println(op.isPresent()); // false
Optional op2 = Optional.of("zhangsan");
System.out.println(op2.isPresent()); //true
}
// 如果optional 包含值, 则返回值; 否则返回设置的默认值.
@Test
public void test_orElse(){
Optional op = Optional.empty();
System.out.println(op.orElse("lisi")); // lisi
Optional op2 = Optional.of("zhangsan");
System.out.println(op2.orElse("lisi")); // zhangsan
}
// 接收供给型参数,返回默认值
@Test
public void test_orElseGet(){
Optional op = Optional.empty();
System.out.println(op.orElseGet(Employee::new));
}
// 接收函数式接口, 可以返回optioanl 包裹对象的属性, 可以根据条件来返回不同的值
@Test
public void test_map(){
Optional<Employee> employee = Optional.of(new Employee(101, "zhangsan", "Man", 20));
Optional<String> op = employee.map((emp -> emp.getName()));
System.out.println(op.get()); // zhangsan
}
// 和map() 类似, 只是函数式接口返回的也是Optional
@Test
public void test_flatMap(){
Optional<Employee> employee = Optional.of(new Employee(101, "zhangsan", "Man", 20));
Optional<String> op = employee.flatMap((emp -> Optional.of(emp.getName())));
System.out.println(op.get()); //zhangsan
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://zongf.blog.csdn.net/article/details/90057677
内容来源于网络,如有侵权,请联系作者删除!