gpt4 book ai didi

java 8 getter 在 null 对象或属性上具有默认值

转载 作者:行者123 更新时间:2023-12-02 07:46:45 26 4
gpt4 key购买 nike

我不太精通 Java,所以我想知道我是否在这里做的。

正如标题所述,下面的代码用于在获取空对象或具有空属性值的对象上的属性时获取一些默认回复。

这似乎有效,但如果有人能告诉我我是否以正确的方式看待问题,我将不胜感激。

import java.util.Optional;
import java.util.function.Function;

public class ReplyOnNullPointer {

static class C{
private String a;
public C(String a){this.a=a;}
public String getAtt(){return a;}
}


private static<I,R> R getterWithDefault(I o,Function<? super I,R> mapper, R orDefault){
return Optional.ofNullable(o).flatMap(x->Optional.ofNullable(mapper.apply(x))).orElse(orDefault);
}

public static void main(String[] args) {
C o1 = null;
C o2 = new C(null);
C o3 = new C("attribut");

System.out.println("o3 : "+o3);
System.out.println("o3.att : "+o3.getAtt());
System.out.println();

System.out.println("o2 : "+o2);
System.out.println("o2.att : "+o2.getAtt());
System.out.println("o2.att : "+Optional.of(o2).flatMap(x->Optional.ofNullable(x.getAtt())).orElse("<nope>"));
System.out.println();

System.out.println("o1 : "+o1);
System.out.println("o1.att : "+Optional.ofNullable(o1).flatMap(x->Optional.ofNullable(x.getAtt())).orElse("<nope>"));

System.out.println();
System.out.println("o1.att : "+getterWithDefault(o1,C::getAtt,"<nope>"));
System.out.println("o2.att : "+getterWithDefault(o2,C::getAtt,"<nope>"));
System.out.println("o3.att : "+getterWithDefault(o3,C::getAtt,"<nope>"));

}
}

输出如下所示:

o3 : ReplyOnNullPointer$C@15db9742
o3.att : attribut

o2 : ReplyOnNullPointer$C@6d06d69c
o2.att : null
o2.att : <nope>

o1 : null
o1.att : <nope>

o1.att : <nope>
o2.att : <nope>
o3.att : attribut

感谢您的更正/意见/建议

最佳答案

我认为这只是:

Optional.ofNullable(o).map(mapper).orElse(orDefault);

您不需要 flatMap(x->Optional.ofNullable(mapper.apply(x))),这正是在 上链接 map 的原因可选的正在做。

关于java 8 getter 在 null 对象或属性上具有默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40767457/

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