3 回答

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)速度不是很快)

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

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
以下將起作用:
public MapBuilder(Class<? extends Map> mapType) throws Exception {
map = mapType.newInstance();
}
添加回答
舉報(bào)