首页 > 解决方案 > Java 8:检查两个或多个变量不为空的优雅方法

问题描述

如何在 Java 8 中完成?

if (var1 != null && var2!=null) {
     callMethod(var1,var2);
}

我在想这样的事情,但有两个变量:

Optional.ofNullable(var1).ifPresent(var1 -> callMethod(var1));

标签: java-8optional

解决方案


您的示例干净易读,没有必要寻找替代方案。正如您所提到的, Optional 只能包装单个值。

如果要替换多个非空检查,可以创建一个结构

Stream.of(var1, var2, var3, ...).allMatch(Objects::nonNull)

这可以包装到一个辅助方法中:

 boolean nonNull(Object arg){
   return arg!=null;
 }
 boolean nonNull(Object arg1, Object arg2){
   return arg1!=null && arg2 !=null;
 }
 ...
 boolean nonNull(Object... args){
   return Arrays.stream(args).allMatch(Objects::nonNull);
 }

但是对于少于 3 个参数,这没有意义,而且性能更差。

保持代码可读,而不是花哨。短是好的,短的更好。


推荐阅读