我使用泛型代码如下:
Set membersKeySet = membersList.keySet(); Iterator<DoubleKey> membersItr = membersKeySet.iterator(); while(membersItr.hasNext()){ DoubleKey<Integer, Integer> dk = membersItr.next(); }
Eclipse告诉我“Set是一个原始类型。对泛型类型&lt; E&gt;的引用应该是参数化的”。 DoubleKey也是一个通用类。我的理解是.iterator()方法不能保证DoubleKey类已经使用相同的参数类型传递。我试过类型转换,但它不起作用。我该如何解决这个问题?谢谢!
P.S。我还在使用Generics。
答案 0 :(得分:4)
如果存储在集合中的对象是DoubleKey<Integer, Integer>
的实例,那么代码应该如下所示:
Set<DoubleKey<Integer, Integer>> membersKeySet = membersList.keySet();
Iterator<DoubleKey<Integer, Integer>> membersItr = membersKeySet.iterator();
while(membersItr.hasNext()){
DoubleKey<Integer, Integer> dk = membersItr.next();
}
答案 1 :(得分:0)
您应该定义键集的类型。
Set<DoubleKey> membersKeySet = membersList.keySet();
请您提供memberList
定义以提供完整的图片?
答案 2 :(得分:0)
根据membersList
的不同,我希望这是解决方案:
Set<DoubleKey> membersKeySet = membersList.keySet();
如果使用原始类型宣布membersList
,它会变得更加棘手......但是当您检查是否需要时,我们将跨过该桥:)< / p>
答案 3 :(得分:0)
从您提供的代码中,看起来memberList实际上是某种类型的地图。因此,为了获得泛型的编译时类型安全性,应该适当地定义membersList,例如
Map<DoubleKey, Object> membersList = new HashMap<DoubleKey, Object>();
Set<DoubleKey> membersKeySet = membersList.keySet();
有了它,你的迭代器应该像你一样工作。
答案 4 :(得分:0)
通常你会使用紧凑的for-loop表示法:
while(DoubleKey<Integer, Integer> dk: membersList.keySet()) { }
如果您在整个地方使用DoubleKey<Integer, Integer>
,请考虑将其全部打造成一个类:
class IIKey extends DoubleKey<Integer, Integer> {}