Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java8中使用Optional检查空值?_Java_Java 8_Java Stream_Optional - Fatal编程技术网

如何在Java8中使用Optional检查空值?

如何在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 {

我有一个包含嵌套类和内部类的类。在一些程序中,我使用传统java方式中的equal运算符检查对象的空值。以下是我的代码片段:

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.