此问题已在此处有答案:
Java: avoid checking for null in nested classes (Deep Null checking)(13个回答)
4年前关闭。
我需要一个通用的方式为空检查。我提出了一个要求。这是一个类的setter方法:
placeHolderValues.setCurrentAddressCountry(communicationSO.getApplicationDetailSO().getApplicantDetails().get(0).getAddressDetail().get(0).getCountry());
我想在placeHolderValues.setCurrentAddressCountry()
中只在值存在时设置值。如果getApplicationDetailSO()
或getApplicantDetails()
或getAddressDetail()
或getCountry()
中的任何一个是NULL,那么我必须在placeHolderValues.setCurrentAddressCountry()
中设置NULL。我有近30种这样的二传手。
我需要一个共同的方法来实现同样的目标。
2条答案
按热度按时间46qrfjad1#
这里有一个很严重的不回答:别那样做。
使用
getA().getB().getC().getD()...getTheThingYouWant()
是非常糟糕的做法。这显然违反了Law Of Demeter。因此,除了你遇到的问题(关于检查null),这样的结构是 * 真的实际上是邪恶的 *。你看,使用这段代码的类必须知道A有B。B后面有个C以此类推。这直接将这个类与所有类A、B、C、...等等。
真实的的答案是避免这种变化。如果有,则执行
getA().getMeWhatINeed()
。唯一的选择:验证您的输入数据完全(在前期步骤中),然后再进入此类调用链。
f1tvaqid2#
你可以使用
Optional.ofNullable
并重复地将map
的值转换为另一个值,除非你在途中遇到null
,然后得到最终值orElse
null
。这仍然不是很漂亮,但至少你不必重复不同的方法调用。其中一些lambda表达式(
->
)也可以用适当的方法引用来替换。(::
)尽管如此,它可能比仅仅将行 Package 到try
块中并将catch
封装到NullPointerExceptoin
中更好。