在将类作为其他类的属性嵌入的常见情况下,检查空值的最佳方法是什么?
为了说明我在说什么,请说我想访问this.getObject1().getObject2().someMethod()
,其中getObject1()
或getObject2()
可能返回null
。现在,我正在执行以下操作,这很丑陋,必须有更好的方法:
if (this.getObject1() != null)
if (this.getObject1().getObject2() != null)
if (this.getObject1().getObject2().someMethod())
return whatever;
为了避免NPE,我必须在访问someMethod()之前在每个步骤中检查null。有什么更好的方法可以做到这一点?
最佳答案
尽量避免使用这种样式-请参见Law of Demeter-尽管我很欣赏库或遗留代码可能不会给您太多选择。
特别是函数式编程语言通过使用Option
或Maybe
对象避免了这个问题,这些对象可以在Java中得到一定程度的使用。例如,请参见this article。使用Scala理解,例如eaxmple,可以简洁地避免长序列的空检查。但是回到Java ...
理想情况下,假设您可以修改正在调用的代码,则可以进行重组,以便可以调用“外部”对象,然后再调用“内部”对象,并且在每个阶段仅执行一次空检查。或重组代码以避免此类深层嵌套。