我有一个简单的方法可以检查属性中没有null
:
public boolean isValid(){
return session.getX() != null && session.getX().getY() != null &&
session.getX().getY().getZ() != null;
}
这样可行,但是,有没有办法以更优雅的方式做到这一点?
提前多多感谢。
答案 0 :(得分:1)
这样可行,但是,有没有办法以更优雅的方式做到这一点?
使用实用程序类执行反射以检索嵌套字段并进行检查,它可能更优雅,但肯定不那么安全和慢:
public boolean isValid(){
return NullAnalyser.isNotNull(session, "x.y.z");
}
另一个想法是返回一个允许在getter中避免NPE的特殊类型。但它使它们变得更加复杂。这是可取的吗?
答案 1 :(得分:1)
如果您使用的是java 8:
,这种方式很优雅public boolean isValid(){
return Optional.of(session)
.map(x -> x.getX())
.map(x -> x.getY())
.map(x -> x.getZ())
.isPresent());
}
答案 2 :(得分:0)
与Dimitry所说的类似,如果你使用Java 8并控制Session,X,Y和Z,那么你可以改变签名以返回Optionals。
您也可以使用方法引用而不是lambdas,它们可以更容易阅读。
public boolean isValid(){
return Optional.of(session)
.map(Session::getX)
.map(X::getY)
.map(Y::getZ)
.isPresent());
}