如何检查对象和嵌套字段是否为空

时间:2017-03-17 11:49:57

标签: java variables object field

我有一个对象,我想检查这个对象或嵌套字段是否为空。我想打印这个neted字段,但是我应该检查某个级别是否有null,否则我将得到空指针异常。

我知道我可以这样做:

if( object != null && object.A != null && object.A.B != null && object.A.B.C != null && object.A.B.C.D != null) { doSomething( object.A.B.C.D);}

但它太长了。你知道更好的检查方法吗?

3 个答案:

答案 0 :(得分:6)

可选是Java 8中的一种好方法。

String value = foo.getBar().getBaz().toString();

可选,它将是:

String value = Optional.ofNullable(foo)
                       .map(Foo::getBar)
                       .map(Bar::getBaz)
                       .map(Baz::toString)
                       .orElse("EmptyString");

答案 1 :(得分:1)

您可以使用返回所有子对象的方法在所有对象上实现一个接口,并创建一个递归调用自身以验证是否已设置所有对象的方法。

答案 2 :(得分:0)

假设这是一个防止滥用方法的检查,所以这不应该发生太多时间。

只需捕获此异常,这将使值无效。

private boolean isValid(YourObject object){
    try{
         return object.A.B.C.D != null;
    } catch (NullPointerException npe){
        return false;
    }
}

当然,如果您正在进行大量验证并且经常返回错误,请不要使用此解决方案,异常是一个繁重的过程。

编辑:

正如Fildor指出的那样,即使毫无例外地使用try-catch也需要付出代价。但是使用这个answer我可以假设这将是有限的,并且在这个独特的线上没有太多的优化。