gpt4 book ai didi

Java继承检查多个变量的值

转载 作者:行者123 更新时间:2023-11-30 06:57:23 26 4
gpt4 key购买 nike

如果我有这样的层次结构情况:

class foo1{
Foo2 foo2;
}

class foo2 {
List<Foo3> foo3;
}

class foo3 {
}

class foo4 extends foo3 {
Foo5 foo;
}

class foo5 {
double value;
}

我想得到最后的 double value但要到达那里,我必须沿着层次结构向下检查所有空值。我可以这样做:

if(foo1 != null) {
if(foo.foo2 != null) {
if(foo.foo2.foo3 != null) {
if( ((foo4) foo.foo2.foo3).getFoo5() != null) {
if(((foo4) foo.foo2.foo3).getFoo5().getValue() != null) {
//do something
}
}
}
}
}

但这看起来很丑陋,而且可能有一些更简单、更简洁的方法来实现相同的目标。我遇到过使用反射,但我不确定我将如何以上述方式使用它。有什么想法可以在不抛出 NPE 的情况下做到这一点吗?

最佳答案

确实没有。可以说这是 Java 的一个缺陷(至少从 Java 7 开始,参见 Scala 或可选类型),但这也不是人们实际编写 Java 的方式。

换句话说,就是抛出一个NPE。在现实生活中,其中大多数不应该为空。例如,如果 Person 类有一个 firstName 字段,它实际上应该始终有一个 firstName 存在。无需检查 firstName 是否存在。如果不是,这是一个错误。如果是错误,则抛出错误。

因为:你还打算做什么?您的示例代码非常不切实际,因为无论最内层的值是否正在更新,代码都同样乐意继续进行。没有错误处理 - 可以说,它是错误吞噬。

您的代码知道该怎么做,所以会抛出错误。错误是 NPE。

如果您的代码确实知道在每个分支处要做什么,那么您需要编写 5 个分支。那是真正的圈复杂度。你不能希望消除圈复杂度——你实际上必须编写 5 个逻辑 block 来处理它。但同样,这不是访问那么远的常见情况。

关于Java继承检查多个变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33489970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com