[英]java static generic hashmap with static generic method
我有類似的東西:
private static LinkedHashMap<Class<?>, ?> configFiles;
和靜態方法:
@SuppressWarnings("unchecked")
public static <T> T getConfigFile(Class<T> clazz) throws Exception {
return (T) configFiles.get(clazz);
}
但我有init方法:
configFiles = new LinkedHashMap<Class<T>, T>();
它沒有編譯:/
但如果我做那樣的事情:
@SuppressWarnings("unchecked")
@Override
public void intitConfigFiles()
throws ClassNotFoundException, ConfigurationFilesException
{
configFiles = new LinkedHashMap<Class<?>, T>();
}
它的工作,但我不知道如何使用方法放:/
Class<T> clazz = (Class<T>) Class.forName(prop.getValue());
jc = JAXBContext.newInstance(clazz);
u = jc.createUnmarshaller();
configFiles.put( clazz, u.unmarshal(inputStream));
我在Eclipse中遇到錯誤我不知道如何正確使用put方法?
Class<?>
與Class<T>
類型不同,因為它用作類型參數,所以它必須是完全相同的類型。 由於靜態變量的類型具有Class<?>
,因此嘗試分配更具體的任何內容都不會獲得任何結果。 只是用
Class<?> clazz = Class.forName(prop.getValue));
把它放到地圖上。 無論如何,泛型對你的情況無能為力,因為類型T
在運行時被擦除。
configFiles
的類型應為LinkedHashMap<Class<?>, Object>
; 否則,正如你所觀察到的,你不能把任何東西放進去。 Object
將允許您將任何內容放入其中,因為任何東西都是Object
的實例,而?
不允許您將除null
之外的任何內容放入其中,因為它必須是未知類型的實例。
然后,您應該使用new LinkedHashMap<Class<?>, Object>
創建它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.