java - 使用多个 getter 时使用 Try-Catch 而不是空检查

标签 java

我的问题如下,我有一个很长的 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 block 会容易得多

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("");

关于java - 使用多个 getter 时使用 Try-Catch 而不是空检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39037764/

相关文章:

java - 从应用程序启动相机相机没有专业相机模式

java - Tomcat 无法发动 war

java - JPA 中的级联设置和 hibernate 中的外键违规

java - 关闭 Karate 中的 SSL 证书验证

java - DeadLock 和 ReentrantLock sleep 时间不一样

java - 如何解决java.lang.IndexOutOfBoundsException : Index: 0, Size: 0的问题

java - Android Studio - 应用程序编译,但不会运行。查看错误

java - 启动Docker容器时获取java.lang.ClassNotFoundException

GWT 的 java.lang.IllegalCastException

不需要无参数构造函数和 Serializable 实现的 Java 序列化库