场景:NullPointerException 问题
在实际开发中经常会做类似如下一些判空操作:
User user = getUser(); //某些操作方法返回后的结果
if(user.getUserName != null) {
//doSomething
}
ofNullable的用法
String result = null;
System.out.println(">>>>>>>>>"+Optional.ofNullable(result)); //打印为:>>>>>>>>>Optional.empty
of的用法
String result = null;
System.out.println(">>>>>>>>>"+Optional.of(result)); //会报空指针异常
总结:of(T value)函数内部调用了构造函数
- 通过of(T value)函数所构造出的Optional对象,当Value值为空时,依然会报NullPointerException。
- 通过of(T value)函数所构造出的Optional对象,当Value值不为空时,能正常构造Optional对象。
java8开始有了Optional类来优化这种写法
orElse的用法
Optional.ofNullable(result).orElse("") //result不为null时返回“ABC”、为null时返回自定义字符串“”(空)
- 注意 这里orElse("")中的类型要和result类型保持一致
orElseGet的用法
Optional.ofNullable(result).orElseGet(() -> {
System.out.println("-------doSomething---------");
return "";
});
Optional.ofNullable(user).orElse(getUser());
Optional.ofNullable(user).orElseGet(() -> getUser());
这两个函数的区别:当result 值不为null时,orElse函数依然会执行getUser(),而orElseGet函数并不会执行getUser()方法。
filter用法
Optional.ofNullable(result).filter(f-> 过滤执行条件).orElse("")