Optional类

2020.7.29

Optional 类主要用于解决空指针异常问题:NullPointerException

本质上是一个可选值的包装类,既可以为空也可以不为空。利用Optional可以简化代码,如解决空指针异常的代码部分。

部分函数:

Optional<Template> var = Optional.of(notNullValue)

var.isPresent();//return true

var.get()//return value值


创建Optional实例:
分析如下:

@Test(expected = NoSuchElementException.class)
public void whenCreateEmptyOptional_thenNull() {
Optional<User> emptyOpt = Optional.empty();
emptyOpt.get();  //此时会导致NoSuchElementException
}

也可以使用 of() 和 ofNullable()方法创建包含值的Optional。但是of()中的参数必须是一个定值,如果是null会抛出NullPointException.所以保险起见,我觉得ofNullable()更好用。

访问对象值:

String name="";

Optional<String> opt = Optional.ofNullable(name);

assertTrue(opt.isPresent());//验证是否为空

assertEqual(opt.get());//取值

注:这里检验是否有值还可以使用 isPresent()方法,该方法除了执行检查,还接受一个Consumer(消费者) 参数,如果对象不是空的,就对执行传入的 Lambda 表达式:

opt.ifPresent( u -> assertEquals(user.getEmail(), u.getEmail()));

这个例子中,只有 user 用户不为 null 的时候才会执行断言。

返回默认值:

Optional 类提供了 API 用以返回对象值,或者在对象为空的时候返回默认值。

这里你可以使用的第一个方法是 orElse(),它的工作方式非常直接,如果有值则返回该值,否则返回传递给它的参数值:User result = Optional.ofNullable(user).orElse(user2);//如果user为空,返回user2.否则直接返回user

第二个同类型的 API 是 orElseGet() —— 其行为略有不同。这个方法会在有值的时候返回值,如果没有值,它会执行作为参数传入的 Supplier(供应者) 函数式接口,并将返回其执行结果:

User result = Optional.ofNullable(user).orElseGet( () -> user2);

 

https://www.cnblogs.com/zhangboyu/p/7580262.html

原文地址:https://www.cnblogs.com/lyqf/p/13398251.html