使用泛型类型的自定义迭代器

时间:2018-06-09 01:56:33

标签: java generics

我正在尝试构建ArrayList的扩展并为它构建一个自定义迭代器,所有这些都是泛型类型,并且我在编译之前遇到了我不理解的错误。

public class GenerateurBiGramme <T> extends ArrayList <T> {
    public Iterator<Pair<T,T>> iterator(int delta){
        return new BiGramme<>(delta);
    }
    public class BiGramme <T> implements Iterator<Pair<T, T>>{
        int premier = 0;
        int dernier = 1;
        int delta;
        public Pair<T, T> next() {
            Pair<T,T> temp = new Pair<T,T>(get(this.debut),get(this.dernier));
            return temp;
        }

我的IDE告诉我&#34; Pair中的Pair(T,T)不能应用于(T,T)。

我不明白这意味着什么。

感谢您的帮助!

编辑: 这是我的&#34; Pair&#34; class:

public class Pair<T, U> {
    public T premiere;
    public U deuxieme;

    public Pair( T premiere, U deuxieme ) {
        this.premiere = premiere;
        this.deuxieme = deuxieme;
    }
}

基本上,我要把一张桌子送进发电机,我打算用#34; premier&#34;和&#34; dernier&#34;在彼此相距一定距离处创建成对...

1 个答案:

答案 0 :(得分:2)

您的问题在于public class BiGramme <T>声明,T隐藏了您在T中声明的public class GenerateurBiGramme <T>。您现在有两个不同的类型参数GenerateurBiGramme.BiGramme,但不幸的是,它们都被称为T

您不需要T声明中的BiGramme,因为它是一个内部类,因此它已经可以访问外部类的类型参数, GenerateurBiGramme。只需将声明更改为public class BiGramme,而不是T。同时从第<>行中删除return new BiGramme(delta);。这对我有用。