【发布时间】:2013-11-06 22:45:48
【问题描述】:
在代码中我们有很多链式方法,例如obj.getA().getB().getC().getD()。我想创建帮助类来检查方法getD() 是否不为空,但在此之前我需要检查所有以前的getter。我可以这样做:
try {
obj.getA().getB().getC().getD();
}
catch (NullPointerException e) {
// some getter is null
}
或(这是“傻”)
if (obj!null && obj.getA()!=null && obj.getA().getB()!=null && ...) {
obj.getA().getB().getC().getD();
}
else {
// some getter is null
}
我不想每次在我的代码中使用try{} catch() 来检查它。为此目的的最佳解决方案是什么?
我认为最好的是:
-
obj.getA().getB().getC().getD().isNull()- 为此我需要更改我所有的 getter,例如实现一些包含isNull()方法的接口。 -
NullObjectHelper.isNull(obj.getA().getB().getC().getD());- 这将是最好的(我认为是这样)但是如何实现呢?
【问题讨论】:
-
解决方案。重构。不要链接#LawOfDemeter
-
@user802421 我不想重构整个应用程序,它太大了。我想做的就是创建一些帮助类。我同意你的观点,重构将是最好的,但我们没有时间。
-
我看不出你的两个“解决方案”如何帮助中间结果成为
null -
我想以这种方式使用它
if (NullObjectHelper.isNotNull(obj.getA().getB().getC().getD())) {} else {}。如果这是个坏主意,我应该怎么做/使用? -
我基本上和其他评论者一样,但您可能会考虑使用 AOP,具体取决于上下文。见this answer
标签: java design-patterns