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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

慕運維8079593 2023-06-04 16:56:37
我有一個 Java 枚舉類,如下所示。我正在嘗試將 A 類型布爾值轉(zhuǎn)換為 B 類型。為此,我將工廠與通用一起使用。但是這里getInstance()方法實現(xiàn)的代碼編譯成功,而getInstance1()方法實現(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) {        }    }}你能幫我理解背后的原因嗎?因為在第一個方法中也使用了相同的通用參數(shù) R 返回,它被成功編譯。但是當(dāng)它作為輸入?yún)?shù)傳遞時,它失敗了。
查看完整描述

1 回答

?
皈依舞

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

這個簽名:

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

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

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

那根本行不通,因為它不是覆蓋等效的。

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


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

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

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);

}


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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