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

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

枚舉的通用輸入?yún)?shù)編譯錯(cuò)誤

枚舉的通用輸入?yún)?shù)編譯錯(cuò)誤

慕運(yùn)維8079593 2023-06-04 16:56:37
我有一個(gè) Java 枚舉類,如下所示。我正在嘗試將 A 類型布爾值轉(zhuǎn)換為 B 類型。為此,我將工廠與通用一起使用。但是這里getInstance()方法實(shí)現(xiàn)的代碼編譯成功,而getInstance1()方法實(shí)現(xiàn)失敗。public enum FactoryEnum {    BOOLEAN {        @SuppressWarnings("unchecked")        @Override        public IConverter<ABoolean, BBoolean> getInstance() {// Compiled Successfully            return new BooleanConverter();        }        @SuppressWarnings("unchecked")        @Override        public IConverter<ABoolean, BBoolean> getInstance(BBoolean bacStacDataType) { // Compilation Failed            return new BooleanConverter(bacStacDataType);        }    };    public abstract <M extends IADataType, R extends IBDataType> IConverter<M, R> getInstance();    public abstract <M extends IADataType, R extends IBDataType> IConverter<M, R> getInstance1(R data);    // A Type    public interface IADataType {    }    public class ABoolean implements IADataType {    }    // B Type    public interface IBDataType {    }    public class BBoolean implements IBDataType {    }    //Converter to Convert Data From A to B    public interface IConverter<M, R> {    }    public class BooleanConverter implements IConverter<ABoolean, BBoolean> {        public BooleanConverter() {        }        public BooleanConverter(BBoolean boolean1) {        }    }}你能幫我理解背后的原因嗎?因?yàn)樵诘谝粋€(gè)方法中也使用了相同的通用參數(shù) R 返回,它被成功編譯。但是當(dāng)它作為輸入?yún)?shù)傳遞時(shí),它失敗了。
查看完整描述

1 回答

?
皈依舞

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

這個(gè)簽名:

public?abstract?<M?extends?IADataType,?R?extends?IBDataType>?IConverter<M,?R>?getInstance1(R?data);

意味著該方法的實(shí)現(xiàn)必須采用任何R(在范圍內(nèi))。

您正在嘗試實(shí)現(xiàn)它以采用特定的 R。

那根本行不通,因?yàn)樗皇歉采w等效的。

此外,您應(yīng)該非常小心這些@SuppressWarnings("unchecked")注釋。僅抑制您可以推理的警告實(shí)際上是安全的;這些不是。


如果您希望枚舉值具有不同的類型,則不能使用枚舉。最終,枚舉值只是包含類中的靜態(tài)最終字段。

因此,只需定義一個(gè)類,然后您就可以使用類級(jí)類型變量來約束特定類型。

public class FactoryClass<M extends IADataType, R extends IBDataType> {


? ? public static final FactoryClass<ABoolean, BBoolean> BOOLEAN = new FactoryClass<ABoolean, BBoolean>() {


? ? ? ? @Override

? ? ? ? public BooleanConverter getInstance() {

? ? ? ? ? ? return new BooleanConverter();

? ? ? ? }


? ? ? ? @Override

? ? ? ? public BooleanConverter getInstance(BBoolean bacStacDataType) {

? ? ? ? ? ? return new BooleanConverter(bacStacDataType);

? ? ? ? }


? ? };


? ? public abstract IConverter<M, R> getInstance();


? ? public abstract IConverter<M, R> getInstance1(R data);

}


查看完整回答
反對(duì) 回復(fù) 2023-06-04
  • 1 回答
  • 0 關(guān)注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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