我有一个包含嵌套和内部类的类。在某些程序中,我使用遗留java方式中的相等运算符检查对象的空值。以下是我的代码片段:
class Outer {
Nested nested;
Nested getNested() {
return nested;
}
}
class Nested {
Inner inner;
Inner getInner() {
return inner;
}
}
class Inner {
String foo;
String getFoo() {
return foo;
}
}
以下是我对引用变量进行空检查的方法:
Outer outer = new Outer();
if (outer != null && outer.nested != null && outer.nested.inner != null) {
System.out.println(outer.nested.inner.foo);
}
我知道这也可以使用java 8的Optional类来完成,但我没有办法做同样的上述特定场景。 有什么建议吗?
答案 0 :(得分:8)
以下代码对我有用:
Optional.of(new Outer())
.map(Outer::getNested)
.map(Nested::getInner)
.map(Inner::getFoo)
.ifPresent(System.out::println);
答案 1 :(得分:6)
我强烈建议你观看最近的Devoxx Belgium presentation "Optional - The Mother of All Bikesheds" by Stuart Marks。 Stuart描述了使用它的初始意图,最佳实践和不良实践。
特别是在字段中使用Optional,引用演示文稿幻灯片:
- 为什么不在字段中使用可选项?
- 更多的是样式问题,而不是正确性问题
- 在字段中使用Optional通常源于消除可空字段的盲目愿望。
- 请记住,消除空值不是Optional
的目标- 在字段中使用可选..
- 为每个字段创建另一个对象
- 在每个字段读取
时从内存中引入依赖负载- 使您的代码混乱
- 有什么好处?链方法的能力?
特别是你的例子:
outer != null
检查?它刚刚创建!Nested
实例需要成为Outer
的一部分且Inner
部分Nested
将其作为构造函数的一部分并使用某些@NotNull
代码或以编程方式检查。