簡體   English   中英

帶有靜態泛型方法的java靜態通用hashmap

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM