我的问题是以下问题,我有很长的 setter/getter ,即

objectA.getObjectB().getObjectC().getObjectD().getObjectE().getName();

由于“不良”的数据库/实体设计(某些事情迟于其他事物介绍),碰巧getObjectB()getObjectC()getObjectD()可能返回NULL

通常我们一直都使用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而不是检查是不好的设计?

感谢您的输入。

最佳答案

如果可以选择使用Java 8,则可以按以下方式使用Optional:

Optional.ofNullable(objectA)
    .map(a -> a.getObjectB())
    .map(b -> b.getObjectC())
    .map(c -> c.getObjectD())
    .map(d -> d.getObjectE())
    .map(e -> e.getName())
    .orElse("");

09-11 18:55
查看更多