【发布时间】:2016-12-26 12:56:44
【问题描述】:
我的问题如下,我有一个相当长的Getter,即,
objectA.getObjectB().getObjectC().getObjectD().getObjectE().getName();
由于“糟糕”的数据库/实体设计(有些东西比其他东西引入得晚),getObjectB()、getObjectC() 或 getObjectD() 可能会返回 NULL。
通常我们一直使用空检查,但在这种情况下,我必须使用
ObjectB b = objectA.getObjectB();
if (b != null) {
ObjectC c = b.getObjectC();
if (c != null) {
ObjectD d = c.getObjectD();
if (d != null)
return d.getObjectE().getName();
}
}
return "";
相反,简单地使用 try-catch 块会更容易
try {
return objectA.getObjectB().getObjectC().getObjectD().getObjectE().getName();
} catch (NullPointerException e) {
return "";
}
在这种情况下,我并不关心哪个对象返回 NULL,它要么显示名称,要么不显示。使用 try-catch 代替检查是否有任何复杂性或者是糟糕的设计?
感谢您的意见。
【问题讨论】:
-
如果 getter 返回
null不是错误,则将异常用于完全正确的情况通常是一个糟糕的设计。 -
多个 if/else 会增加圈复杂度!这是肯定的!
-
如果你的项目看起来很垃圾,并且你不会重新做项目架构,试着写一些性能测试,看看 null check 和 try-catch 之间的区别。
-
另外,如果你要写性能测试,请在这里写下你的结果。
-
这就是为什么 java 需要一个空证明点运算符...
object?.getObjectB()?.getObjectC()...
标签: java