Java NPE防守v尝试/接球?

Java NPE防守v尝试/接球?,java,nullpointerexception,Java,Nullpointerexception,我并不提倡捕获NullPointerException,因为它始终是一种代码嗅觉/惰性方法。但是,请考虑访问嵌套bean内部的一个字段。 防御性NPE检查 惰性NPE检查 两个问题: 演出 在什么深度[a,b,c….z,如上面的例子中所示]较重的重量试捕/捕获比防御NPE检查更有效 可读性 在什么深度[a,b,c….z,如上述示例中所示]下,try/catch比multiple&&更具可读性 请不要回答“重新考虑嵌套bean的因素”:-尝试使用可选选项: Optional.ofNullable(

我并不提倡捕获NullPointerException,因为它始终是一种代码嗅觉/惰性方法。但是,请考虑访问嵌套bean内部的一个字段。 防御性NPE检查

惰性NPE检查

两个问题:

演出

在什么深度[a,b,c….z,如上面的例子中所示]较重的重量试捕/捕获比防御NPE检查更有效

可读性

在什么深度[a,b,c….z,如上述示例中所示]下,try/catch比multiple&&更具可读性

请不要回答“重新考虑嵌套bean的因素”:-

尝试使用可选选项:

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

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

第一个代码气味:a.b.c.d.e。第二个代码气味:为什么东西甚至可以是空的?最后:在else/catch的情况下你会怎么做?请不要回答重新考虑嵌套bean-这正是你应该做的。为什么你会自动地认为try/catch更有效?我认为这是一个完全正确的问题。有些bean无法重构,因为它们来自第三方,而您没有源代码。许多基于SOAP和REST的API返回null而不是空列表。不幸的是,事情就是这样。因此@luk2302不重新考虑嵌套bean的请求并不像听起来那么愚蠢。永远不要使用null-这在101 java程序中既不实际也不合理。任何大型企业系统/与第三方的任何接触点,您必须处理无效情况。谢谢你的选择。
try
{
     doSomething( a.b().c().d().e ); 
}
catch(NullPOinterException npe)
{
}
Optional.ofNullable(a)
    .map(A::b)
    .map(B::c)
    .map(C::d)
    .map(d -> d.e)
    .ifPresent(()->X::doSomething);