我有一个对象,我想检查这个对象或嵌套字段是否为空。我想打印这个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);}
但它太长了。你知道更好的检查方法吗?
答案 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我可以假设这将是有限的,并且在这个独特的线上没有太多的优化。