我不太熟练Java,所以我想知道我是否在这里做。java 8空值对象或属性上的默认值的getter
正如标题所述,下面的代码用于在空对象或具有空属性值的对象上获取属性时获取某些默认答复。
这似乎工作,但我会很感激,如果有人能告诉我,如果我以正确的方式看问题。
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 : [email protected]
o3.att : attribut
o2 : [email protected]
o2.att : null
o2.att : <nope>
o1 : null
o1.att : <nope>
o1.att : <nope>
o2.att : <nope>
o3.att : attribut
感谢你的更正/意见/通知:
SO可能不是最好的地方问这个问题。你应该去这里http://codereview.stackexchange.com/ – Diyarbakir
@Alfabravo关闭一个问题,如果它是离题。无论它是否在其他地方进行专题讨论,Code Review或其他SE网站都无关紧要。 – Mast
@Mast嗨!当我投票结束时,这个评论是由SO产生的。此外,它是相关的,因为问题可能会转移到SE上的网站,所以OP可以得到有用的帮助(这就是这一切的目的,对吧?)。 – Alfabravo