我是泛型的新手。Java泛型:聲明泛型類型的映射值
有一個Map
像
private static Map<String, Object> map;
和像
public <T> T getObject(final Class<T> myClass) {
return (T)map.get(myClass);
}
的方法如何改變,以地圖的聲明從方法返回時沒有做演員?
我是泛型的新手。Java泛型:聲明泛型類型的映射值
有一個Map
像
private static Map<String, Object> map;
和像
public <T> T getObject(final Class<T> myClass) {
return (T)map.get(myClass);
}
的方法如何改變,以地圖的聲明從方法返回時沒有做演員?
你需要做一個通用類,而不是一個通用的方法:
public class MyClass<T> {
private Map<String, T> map;
public T getObject(final String key) {
return map.get(key);
}
}
另外,我將參數從一個類更改爲一個字符串。如果map.get()需要一個String,那麼傳遞一個Class沒有任何意義。
編輯:我沒有注意到地圖是靜態的。如果您可以將其更改爲非靜態而不破壞程序的其他部分,則可以使用此功能。如果你不能,那麼你無法避免演員陣容。
無法對非靜態類型T做出靜態引用T –
@DisplayName OK,map是靜態的,我錯過了。然後,如果您無法將地圖從靜態更改爲非靜態,則這不起作用。 – Pablo
如果你願意放棄你的地圖的static
修改,比你能做到像這樣:
public class MyClass<T> {
private Map<String, T> map;
public T getObject(final Class<T> myClass) {
return map.get(myClass);
}
}
否則:
這是一個編譯時錯誤指一個通用的 類C的一個類型參數中的任何位置:
- 的ç
01的靜態成員的聲明
(摘自JLS),其阻止您使用參數化類實現上述。
什麼你試圖做,但是,從另一個成員(這恰好也是靜態的),這也可達指一個參數方法的類型參數。
你有沒有機會宣佈地圖像'Map>'? –
nobeh
@nobeh IDE說:T無法解析爲類型 –
我認爲@Pablo對此有一個很好的答案。 – nobeh