簡體   English   中英

java 8 getter,在null對象或屬性上使用默認值

[英]java 8 getter with default value on null object or attribute

我不太熟悉Java,所以我想知道我是否在這里做。

正如標題所述,下面的代碼用於在獲取空對象或具有null屬性值的對象時獲取某些默認回復。

這似乎有效,但如果有人能告訴我,我是否正確地看待問題,我會感激不盡。

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))) ,這正是Optional上的鏈接map

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM