引言: 在使用jdk1.8时 我们使用jdk1.8的新特性Optional类解决判断为Null的问题
其中我们使用ifPresent()方法来替代传统的 if(user != null)判断
示例:
public void Test01(User user) { if (user != null) { // jdk1.8之前判断对象为null user.getName(); user.getAge(); } } // 使用Optional类 public void Test02(User user) { Optional.ofNullable(user).ifPresent(u -> { user.getName(); user.getAge(); }); }
在1.8时期 Optional 类只为我们提供了代替 if(user != null) 的方法,并未提供支持 if (user != null) else { // xxx}的操作,即JDK1.8中 Optional 类 ifPresent 方法没有对else的操作提供支持
在JDK1.9后改进了 Optional 类增加了 ifPresentOrElse 方法,此方法支持了if (user != null) else { // xxx}的操作
示例 :
public void Test01(User user) { if (user != null) { user.getName(); user.getAge(); } else { System.err.println("user 对象为null"); } } public void Test02(User user) { Optional.ofNullable(user).ifPresentOrElse(u -> { user.getName(); user.getAge(); }, () -> { System.err.println("user 对象为null"); }); }
我们来看一下ifPresentOrElse方法源码
ifPresentOrElse 方法的改进就是有了 else 操作,接收两个参数 Consumer 和 Runnable。
ifPresentOrElse 方法的用途是,如果一个对象不为null,则对其包含的值调用函数 action,即 action.accept(value),这与 ifPresent 一致;与 ifPresent 方法的区别在于,ifPresentOrElse 还有第二个参数 emptyAction —— 如果对象不包含值即对象为null,那么 ifPresentOrElse 便会调用 emptyAction,即 emptyAction.run()。
public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) { if (value != null) { action.accept(value); } else { emptyAction.run(); } }