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