我已經聲明它包含長型的鍵的嵌套式地圖無法把對象在一個通用的地圖
嵌套地圖映射具有 基本上我想類型SomeClient的類型類的密鑰和值的地圖生成Class類型到產生Class類型響應的客戶端的映射。
private static final Map<Long, Map<Class<? super GenericResponse>, SomeClient<? super GenericResponse>>> someClientMap
= new HashMap<Long, Map<Class<? super GenericResponse>, SomeClient<? super GenericResponse>>>(); // <? super GenericResponse> should enable me to put subclasses of type GenericResponse in the Map
的getSomeClient方法是接受的類類型作爲參數,並返回它產生類類型的應答的客戶機的通用方法(的類類型只能是GenericResponse的子類:通知類型參數中的方法簽名)
public static <T extends GenericResponse> SomeClient<T> getSomeClient(long clientId,Class<T> clazz) throws IOException {
if (someClientMap.get(clientId) == null) {
synchronized (someClientMap) {
someClientMap.put(clientId, new HashMap<Class<T>,SomeClient<T>>()); //getting error here
}
}
return someClientMap.get(clientId);
}
問題是我得到一個編譯時錯誤,我試圖把客戶端放在地圖中。
確切的錯誤是
The method put(Long, Map<Class<? super GenericResponse>,SomeClient<? super GenericResponse>>) in the type Map<Long,Map<Class<? super GenericResponse>,SomeClient<? super GenericResponse>>> is not applicable for the arguments (long, HashMap<Class<T>,SomeClient<T>>)
我有困難指出究竟我做錯了。請幫忙。
宣言SomeClient是
public class SomeClient<T extends GenericResponse>
,並在構造器是
public SomeClient(Class<T> clazz)
看起來問題出現在'長'與'長' - 你正在放置'長'參數,地圖期望'長'。添加投射或使用'Long.valueOf(。)'方法 –
您可以在問題中發佈'SomeClient'和'GenericResponse'聲明嗎? –