检查"嵌套" Java中的null属性

时间:2017-01-13 11:26:00

标签: java nullpointerexception null boolean defensive-programming

我有一个简单的方法可以检查属性中没有null

public boolean isValid(){
     return session.getX() != null && session.getX().getY() != null &&
     session.getX().getY().getZ() != null;
}

这样可行,但是,有没有办法以更优雅的方式做到这一点?

提前多多感谢。

3 个答案:

答案 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());
}