Java:类型与泛型类的迭代器不匹配

时间:2013-06-07 16:27:01

标签: java generics iterator

我想为一个工作正常的类创建一个Iterator。我认为迭代器会尝试使用泛型类的TypeParameter进行迭代,但显然情况并非如此,因为Eclipse告诉我需要一个Object。

如果有人知道我做错了什么,我会非常高兴。

public class GenericClass<T extends OtherClass> implements Comparable, Iterable
{
    private ArrayList<T> list = new ArrayList<T>();
    [...]
    @Override
    public Iterator<T> iterator()
    {
    Iterator<T> iter = list .iterator();
    return iter;
}
    [...]
}



public class Main
{
public static void main(String[] args)
{
    GenericClass<InstanceOfOtherClass> gen = new GenericClass<InstanceOfOtherClass>("Aius");

    for(InstanceOfOtherClass listElement : gen) // This is the problem line; gen is underlined and listElement is expected to be an Object
    {
        System.out.println(listElement.getName());
    }

}

}

2 个答案:

答案 0 :(得分:8)

implements Comparable, Iterable

您需要指定基接口的通用参数 否则,您将非通用地实施Iterable,类型参数将变为Object

答案 1 :(得分:0)

如果您想让您的课程像GenericClass<T extends OtherClass>一样通用,那么您应该实施Comparable<T>Iterable<T>T在两种情况下都是相同的TGenericClass声明。

当您按如下方式执行泛型类型实例化时

 GenericClass<InstanceOfOtherClass> //...

效果是它正在实施Comparable<InstanceOfOtherClass>Iterable<InstanceOfOtherClass>,这使得方法签名匹配。