第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何使用有界類型參數(shù)的抽象工廠模式?

如何使用有界類型參數(shù)的抽象工廠模式?

函數(shù)式編程 2021-04-02 18:19:35
我試圖將Abstract Factory Pattern與有界的類型化參數(shù)一起使用,示例如下:CageAbstractFactory.javapublic interface CageAbstractFactory {    public Cage<?> createCage();}CageFactory.javapublic class CageFactory {    public static Cage<?> getCage(CageAbstractFactory factory) {        return factory.createCage();    }}XxxCageFactory.java(Xxx = Lion,Rat等)public class XxxCageFactory implements CageAbstractFactory {    @Override    public Cage<Xxx> createCage() {        return new XxxCage();    }}籠子public abstract class Cage<T extends Animal> {     protected Set<T> cage = new HashSet<T>();    public abstract void add(T animal);    public void showAnimals() {        System.out.println(cage);    }}XxxCage.java(Xxx = Lion,Rat等)public class XxxCage extends Cage<Xxx> {    @Override    public void add(Xxx r) {        cage.add(r);    }}動(dòng)物.javapublic class Animal {    public String toString() {        return getClass().getSimpleName();    }   }class Rat extends Animal {}class Lion extends Animal {}AFP.java(主類)public class AFP {    public static void main(String[] args) {        Cage<?> rc = CageFactory.getCage(new RatCageFactory());        Cage<?> lc = CageFactory.getCage(new LionCageFactory());        rc.add(new Rat());        rc.showAnimals();        lc.add(new Lion());    }}在第rc.add(new Rat())OR行或rc.add(new Lion())以下錯(cuò)誤出現(xiàn):The method add(capture#3-of ?) in the type Cage<capture#3-of ?> is not applicable for the arguments (Rat)似乎從Cage<?>到Cage<Rat>/的類型轉(zhuǎn)換錯(cuò)誤Cage<Lion>但是問題是CageFactory.getCage(CageAbstractFactory factory)返回Cage<?>是僅在運(yùn)行時(shí)通過選擇CageAbstractFactory作為參數(shù)傳遞的類(即LionCageFactoryOR RatCageFactory)來決定的。
查看完整描述

2 回答

?
慕田峪9158850

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超7個(gè)贊

不要使用wildcard ?作為


public static Cage<?> getCage(CageAbstractFactory factory) {

    return factory.createCage();

}

但是使用通用


public static <T extends Animal> Cage<T> getCage(CageAbstractFactory factory) {

    return factory.createCage();

}


查看完整回答
反對 回復(fù) 2021-04-18
?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊

您還需要對進(jìn)行概括CageAbstractFactory:


public interface CageAbstractFactory<T> {

    public Cage<T> createCage();

}


public class CageFactory {

    public static <T> Cage<T> getCage(CageAbstractFactory<T> factory) {

        return factory.createCage();

    }

}


public class XxxCageFactory implements CageAbstractFactory<Xxx> {

    @Override

    public Cage<Xxx> createCage() {

        return new XxxCage();

    }

}


查看完整回答
反對 回復(fù) 2021-04-18
  • 2 回答
  • 0 關(guān)注
  • 169 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)