如何在Java8中使用Optional检查空值?
我有一个包含嵌套类和内部类的类。在一些程序中,我使用传统java方式中的equal运算符检查对象的空值。以下是我的代码片段:如何在Java8中使用Optional检查空值?,java,java-8,java-stream,optional,Java,Java 8,Java Stream,Optional,我有一个包含嵌套类和内部类的类。在一些程序中,我使用传统java方式中的equal运算符检查对象的空值。以下是我的代码片段: class Outer { Nested nested; Nested getNested() { return nested; } } class Nested { Inner inner; Inner getInner() { return inner; } } class Inner {
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);
}
我知道这也可以使用Java8的可选类来完成,但我没有找到一种方法来完成上述特定场景。
有什么建议吗?以下代码对我很有用:
Optional.of(new Outer())
.map(Outer::getNested)
.map(Nested::getInner)
.map(Inner::getFoo)
.ifPresent(System.out::println);
我强烈建议你看最近的电视节目。Stuart正在描述最初的意图、使用它的最佳实践和不良实践 特别是使用可选字段,引用演示幻灯片中的内容:
- 为什么不在字段中使用可选?
- 与其说是正确性问题,不如说是风格问题
- 在字段中使用Optional通常源于消除可为空字段的奴性愿望
- 记住,消除空值不是可选的目标
- 在字段中使用可选的。。
- 为每个字段创建另一个对象
- 在每次读取字段时从内存引入从属负载
- 把你的代码弄乱了
- 有什么好处?链方法的能力
outer!=空
检查?它刚刚被创造出来李>
嵌套
实例需要是外部
和内部
嵌套的一部分,则让它们成为构造函数的一部分,并使用一些@NotNull
代码进行保护,或者通过编程方式进行检查谢谢你链接到我的演讲!感谢您为java社区带来如此深刻的见解!这是很好的代码,你可以在这里完全回答你自己的问题,甚至接受它们+1.