鍍金池/ 問答/Java/ java 根據(jù)泛型返回對象

java 根據(jù)泛型返回對象

我想寫一個公共方法,傳入兩個相同類型對象a、b,如果a是null就返回b

public static ifObj(Object a, Object b) {
    if(null == a) {
        return b;
    }else {
        return a;
    }
}

Obj obj = ifObj(xxx, new xxx());

可是這樣做返回結(jié)果還要轉(zhuǎn)型,我想ifObj的基礎上修改一些,調(diào)用方法傳一個對象類型或泛型,判斷a為null的話,根據(jù)類型或泛型泛型new一個對象返回;這樣思路可以嗎,語法應該怎樣寫才能實現(xiàn)呢。

回答
編輯回答
負我心

@learnmeahaskell 在評論中給了你思路,不過我想再提一點:

ifObj(xxx, new xxx()) 的話,也就是說無論 xxx 是否為空,都會執(zhí)行 new xxx() 來生成新實例,這樣不是很好,會導致無意義的資源開銷,可以用個接口來延遲加載。

public interface Supplier<T> {
    T supply();
}

public static <T> T ifObj(T a, Supplier<T> s) {
    return a == null ? s.supply() : a;
}

Obj obj = ifObj(xxx, new Supplier<Obj>() {
    @Override
    public Obj supply() {
        return new xxx();
    }
});

// 如果是 jdk8 那就可以直接使用 `Optional`
Obj obj = Optional.ofNullable(xxx).orElseGet(() -> new xxx());

orElseGet 里其實就是 supplier。

2018年6月13日 21:27