如何使用自定义类作为迭代器的类型变量?

时间:2011-02-15 18:53:14

标签: java generics implementation

我使用泛型代码如下:

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。

5 个答案:

答案 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&lt;Integer, Integer&gt;,请考虑将其全部打造成一个类:

class IIKey extends DoubleKey<Integer, Integer> {}