我正在开发一个Android项目,它在Java中使用了很多奇怪的空值检查,导致这样的代码行:
if (foo == null || foo.bar == null || foo.bar.foobar == null) {
return;
}
我正在尝试使用Utility类
来清理它public class Utility {
public static boolean allNotNull(Object... objects) {
for (Object object : objects) {
if (objectIsNull(object)) { return false; }
}
return true;
}
public static boolean anyAreNull(Object... objects) {
return !allNotNull(objects);
}
private static boolean objectIsNull(Object object) {
try {
return object == null;
} catch (NullPointerException e) {
return true;
}
}
}
使用这个类,我想将代码简化为
if (Utility.areAnyNull(foo.bar.foobar)) {
return;
}
不幸的是,当A为null时,在进入areAnyNull函数之前崩溃。有没有办法防止函数崩溃,而不在我的每个if(Utility ...)调用周围包装try catch语句?或者,有没有更好的方法来清理我的if语句检查是否有空?
答案 0 :(得分:0)
在Java中没有任何本地语法方法可以做到这一点。但是如果你有Java 8,你可以使用Optional
做类似的事情:
boolean areAnyNull = !Optional.of(foo)
.map(foo -> foo.bar)
.map(bar -> bar.foobar)
.isPresent();