在 Java 中检查"nested"空属性



我有一个简单的方法来检查属性中没有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());
}

最新更新