复杂结构的名单上有以下两类:如何创建里面
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