A.Optional解决了什么问题?
Optional解决了程序中常见的空指针异常.
B.Optional怎么使用
常用API:
创建实例:
1.of()
Optional<User> opt = Optional.of(user);
2.ofNullable()
Optional<User> opt = Optional.ofNullable(user);
这两个方法的区别在于,如果你传入的参数为null,那么of()会抛出NEP异常。ofNullable不会。
所以不确定参数是否为空时,建议使用ofNullable()创建实例。
获取和判断实例是否为空
get()
isPresent() ====> != (对象存在)
返回值
orElse(Object2) =====> 如果参入的对象为空,则返回Object2
User user = new User("john@gmail.com","1234");
User user2 = new User("anna@gmail.com", "1234");
User result = Optional.ofNullable(user).orElse(user2);
=====> 如果传入的值不为空,则Oject2被忽略
转换值
User user = new User("anna@gmail.com", "1234");
String email = Optional.ofNullable(user)
.map(u -> u.getEmail()).orElse("default@gmail.com");
assertEquals(email, user.getEmail());
过滤值
User user = new User("anna@gmail.com", "1234");
Optional<User> result = Optional.ofNullable(user)
.filter(u -> u.getEmail() != null && u.getEmail().contains("@"));
assertTrue(result.isPresent());
C.Optional什么时候使用
Optional 主要用作返回类型。在获取到这个类型的实例后,如果它有值,你可以取得这个值,无值,则进行替代行为,还可以将其与流或其它返回 Optional 的方法结合,以构建流畅的API。
需要注意:ptional 不是 Serializable。因此,它不应该用作类的字段。