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

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

將泛型 Class 參數(shù)限制為實(shí)現(xiàn) Map 的類

將泛型 Class 參數(shù)限制為實(shí)現(xiàn) Map 的類

皈依舞 2022-06-23 20:09:43
我正在嘗試編寫(xiě)一個(gè)Map構(gòu)建器。其中一個(gè)構(gòu)造函數(shù)將允許客戶端指定Map他們希望構(gòu)建的類型public class MapBuilder<K, V> {    private Map<K, V> map;    /**     * Create a Map builder     * @param mapType the type of Map to build. This type must support a default constructor     * @throws Exception     */    public MapBuilder(Class<? extends Map<K, V>> mapType) throws Exception {        map = mapType.newInstance();    }    // remaining implementation omitted}目的是應(yīng)該可以通過(guò)以下方式構(gòu)造構(gòu)建器的實(shí)例:MapBuilder<Integer, String> builder = new MapBuilder<Integer, String>(LinkedHashMap.class);或者M(jìn)apBuilder<Integer, String> builder = new MapBuilder<Integer, String>(HashMap.class);似乎構(gòu)造函數(shù)參數(shù)的類型簽名當(dāng)前不支持這一點(diǎn),因?yàn)樯厦娴男袝?huì)導(dǎo)致“無(wú)法解析構(gòu)造函數(shù)”編譯錯(cuò)誤。如何更改我的構(gòu)造函數(shù)以使其接受Map僅實(shí)現(xiàn)的類?
查看完整描述

3 回答

?
拉風(fēng)的咖菲貓

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

使用 aSupplier而不是 a Class:


public MapBuilder(Supplier<? extends Map<K, V>> supplier) {

    map = supplier.get();

}

然后可以這樣調(diào)用:


MapBuilder<Integer, Integer> builder = new MapBuilder<>(LinkedHashMap::new);

這也更安全,因?yàn)?aClass<Map> 可能沒(méi)有默認(rèn)構(gòu)造函數(shù),這會(huì)引發(fā)錯(cuò)誤(響應(yīng)速度不是很快)


查看完整回答
反對(duì) 回復(fù) 2022-06-23
?
FFIVE

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

問(wèn)題LinkedHashMap.class

Class<LinkedHashMap>

而不是像

Class<LinkedHashMap<Integer, String>>

這些也是不可轉(zhuǎn)換的類型(所以你不能轉(zhuǎn)換它)并且沒(méi)有辦法獲得后者的實(shí)例。

您可以做的是將構(gòu)造函數(shù)更改為

public MapBuilder(Class<? extends Map> mapType) throws Exception

泛型在運(yùn)行時(shí)被刪除,所以在運(yùn)行時(shí)所有Map的 s 都會(huì)表現(xiàn)得像Map<Object, Object>無(wú)論如何。因此,您構(gòu)建的類是否使用原始類型并不重要。


順便說(shuō)一句,Class::newInstance已棄用。利用

mapType.getConstructor().newInstance()


查看完整回答
反對(duì) 回復(fù) 2022-06-23
?
慕哥6287543

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

以下將起作用:


public MapBuilder(Class<? extends Map> mapType) throws Exception {

    map = mapType.newInstance();

}


查看完整回答
反對(duì) 回復(fù) 2022-06-23
  • 3 回答
  • 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)