gpt4 book ai didi

java - 用 Java 8 Optional 替换重复的 get 语句

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:49 24 4
gpt4 key购买 nike

我有一个用例,其中有嵌套类和顶级类的对象。我想获得第 N 级的值。我重复使用 setter/getter 来实现这一点以避免 NPE。示例代码(假设有 getter)

class A {
String a1;
String getA1() {
return a1;
}
}

class B {
A a;
A getA() {
return a;
}
}

class C {
B b;
B getB() {
return b;
}
}

class D {
C c;
C getC() {
return c;
}
}

如果我有一个D类的对象d,并且想得到AString a1 ,我正在做的是:

String getAValue(D d) {
String aValue = null;
if(d != null && d.getC() != null && d.getC().getB() != null && d.getC().getB().getA() != null) {
aValue = d.getC().getB().getA().getA1();
}
return aValue;
}

这个重复的 a 看起来真的很难看。如何通过使用 java8 Optional 来避免它?

编辑:我不能修改上面的类。假设这个 d 对象作为服务调用返回给我。我只接触到这些 setter/getter 。

最佳答案

Optional 与一系列 map() 调用一起使用,以获得漂亮的单行代码:

String getAValue(D d) {
return Optional.ofNullable(d)
.map(D::getC).map(C::getB).map(B::getA).map(A::getA1).orElse(null);
}

如果链中的任何内容为 null,包括 d 本身,orElse() 将执行。

关于java - 用 Java 8 Optional 替换重复的 get 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32599353/

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