Java Optional使用
是一个主要解决空指针(NullPointerException)的包装类。
该Optional 类既可以含有对象也可以为空,解决繁杂的代码,实现函数式编程。
例子:
下面代码任何对象和属性都有可能导致报错空指针
String isocode = user.getAddress().getCountry().getIsocode().toUpperCase();
要想确保不抛异常,就得访问每一个值之前明确检查
if (user != null) {
Address address = user.getAddress();
if (address != null) {
Country country = address.getCountry();
if (country != null) {
String isocode = country.getIsocode();
if (isocode != null) {
isocode = isocode.toUpperCase();
}
}
}
}
java 8 optional 怎么做
//对象为null 时 优化后
User user = new User();
//java 8 怎么做
String result = Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCountry)
.map(c -> c.getIsocode())
.orElse("");
System.out.println(result);
用Optional来优化的代码
Optional.ofNullable()
常用方法使用
1.empty() 返回空的 Optional 实例
2.filter() 过滤
3.ifPresent() 如果值存在则方法会返回true,否则返回 false
3.1 ifPresent(Consumer<? super T> consumer) 存在值做相应的操作。否则什么都不做
4.get() 存在值则返回,否则抛出 NoSuchElementException
5.orElse() 如果存在该值,返回值, 否则返回 other。
6.orElseGet( other ) 如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。
7.orElseThrow(Supplier<? extends X> exceptionSupplier) 如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常
8.map() 翻转映射
9.ofNullable() 允许传递为 null 参数