複雜結構的名單上有以下兩類:如何創建裏面
class Key<T1, T2> {}
class Pair<F, S> {}
我想創建一個映射,從Key<T1, T2>
到List<Pair<T1, T2>>
其中T1和T2是每個地圖的入口不同。我想實現這樣說:
class KeyToListMap {
private Map<Key<?, ?>, List<Pair<?, ?>>> myItems = new HashMap<Key<?, ?>, List<Pair<?, ?>>>();
public<T1, T2> List<Pair<T1, T2>> getList(Key<T1, T2> key) {
if (!myItems.containsKey(key)) {
myItems.put(key, new ArrayList<Pair<T1, T2>>());
}
return (List<Pair<T1, T2>>) myItems.get(key);
}
}
但是我有兩個類型的錯誤:
put(test.Key<?,?>,java.util.List<test.Pair<?,?>>) in java.util.Map<test.Key<?,?>,java.util.List<test.Pair<?,?>>> cannot be applied to (test.Key<T1,T2>,java.util.ArrayList<test.Pair<T1,T2>>)
inconvertible types
found : java.util.List<test.Pair<?,?>>
required: java.util.List<test.Pair<T1,T2>>
我怎樣才能表達這種在Java中,而不訴諸使用原始類型?
'>'是*未知類型*,該類型與其他類型不同。這就是爲什麼這些類型不可轉換的原因。這是一個常見的誤解,認爲'?'是任何類型的佔位符 – 2012-02-14 09:46:47
2Andreas_d。我明白。但我怎麼能表達我想要的? – 2012-02-14 09:48:58
順便說一句:你聽說過KISS原則嗎?沒有冒犯,但是在你完成代碼的一年後,你能夠(期望別人能夠)真正理解這裏發生的事情嗎? – aviad 2012-02-14 10:40:43