小典典
捕获NullPointerException是一个非常有问题的事情,因为它几乎可以在任何地方完成。 从错误中获取错误,错误地捕捉它,并继续像一切都正常一样,非常简单,隐藏着真正的问题。 因为处理起来非常困难,所以最好完全避免。 例如,假设Integer自动打开空值的包装。 )
建议改为使用Optional类。 如果要使用hcdss存在或不存在的值,通常这是最好的方法。
你可以用它写代码,如下所示。
公共项目(wsws对象) {
返回选项. of nullable (ws object.get foo ()//Here you get Optional.empty ) ) if the Foo is null
. map(f-f.getbar )//hereyoutransformtheoptionalorgetemptyifthebarisnull
. map(B-B.getbaz ) )
. map(B-B.getint ) );
//addthisifyouwanttoreturnan-1 insteadofanemptyoptionalifanyisnull
//orelse(-1 );
//orthisifyouwanttothrowanexceptioninstead
//or else throw (someapplicationexception :3360 new;
}
为什么是可选的?
使用Optionals代替null中可能不存在的值,可以使读者非常清楚事实,不同类型的系统不会错误地忘记事实。
也可以访问更容易使用这些值的方法,如map和orElse。
缺席有效还是错误?
但是,还必须考虑中间方法返回null是否是有效的结果,或者这是否是错误的征兆。 如果始终是错误,则抛出异常可能比返回特殊值或向中间方法本身抛出异常更好。
可能有更多的选择吗?
另一方面,如果缺少中间方法的值仍然有效,Optional是否也可以将它们切换为s?
然后,你可以这样使用它们:
公共对象(wsws对象) {
返回ws object.get foo (
.平面图(f-f.get bar ) )
.平面图(B- b.get baz ) )
.平面图(B- b.getint ) );
}
为什么不选择呢?
我唯一可能不使用的理由选项是,它是否位于代码性能的关键部分,以及垃圾回收的开销是否是问题。 这是因为选项每次运行代码时都会分配一些对象,虚拟机可能无法对其进行优化。 在这种情况下,原始的if测试可能更好。
2020-03-22