我很難用泛型聲明Map。我想聲明一個地圖具有以下屬性:Java泛型和映射聲明
- 的關鍵是從一個特定的接口派生的任何類型T的一個類對象(的IFoo)
- 地圖的值是另一個地圖其鍵是一個字符串,其值是T型
我想我可以做這樣的:
public static Map<Class<T extends IFoo>, Map<String, T>> valueCache =
new HashMap<Class<T extends IFoo>, Map<String, T>>();
我得到一個語法錯誤「擴展」
(?)如果我使用通配符這樣的替代性的T型似乎是語法正確:
public static Map<Class<? extends Typ>, Map<Integer, ?>> valueCache=
new HashMap<Class<? extends Typ>, Map<Integer, ?>>();
但我不認爲這是我想要的,因爲我想成爲的確切類型Class對象將成爲第二個映射中的值。
任何幫助表示讚賞。
嗯。這是一個靜態字段。它只有每一個副本。不應該知道那種類型嗎?爲什麼你需要一個佔位符?如果沒有實例,它如何具有泛型? – Thilo 2015-02-12 07:11:44
我不認爲有任何方法可以在泛型類之外進行這樣的聲明。但是如果該字段不公開,至少可以使用泛型方法來訪問它並確保類型匹配。公共靜態變量是魔鬼。 – 2015-02-12 07:14:03
你不能這樣做:你不能讓'Class'類型對應這些值。 – 2015-02-12 07:27:34