NPE Defensive v try / catch?

时间:2017-11-10 09:07:58

标签: java nullpointerexception

我并不主张捕捉NullPointerException,因为它总是代码味道/懒惰的方法。但是,请考虑您想要访问嵌套bean内部的字段。

防御性NPE检查

if (  null != a && null != a.b() && null ! = a.b().c() && null !=   a.b().c().d() ) 
{
     doSomething( a.b().c().d().e );
}

懒惰的NPE检查

try
{
     doSomething( a.b().c().d().e ); 
}
catch(NullPOinterException npe)
{
}

两个问题:

  1. 性能

    在上面的例子中,[a,b,c ...... z]的重量是什么,比防御性NPE检查更重的尝试/捕获更有效?

  2. 可读性

    在上面的例子中,[a,b,c ...... z]的深度是多重&&?<&?

  3. 请不要回答“嵌套豆子”的重新考虑因素。 : - )

1 个答案:

答案 0 :(得分:1)

尝试使用Optional:

Optional.ofNullable(a)
    .map(A::b)
    .map(B::c)
    .map(C::d)
    .map(d -> d.e)
    .ifPresent(()->X::doSomething);

不确定它是否更具可读性。但有时看起来好像是一个正在寻找使用方法的类。