我正在尝试构建ArrayList的扩展并为其构建自定义的Iterator,所有这些都是通用类型,并且在编译之前遇到了我不理解的错误。

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告诉我“成对的配对(T,T)无法应用于(T,T)。

我不明白那是什么意思。

谢谢您的帮助!

编辑:
这是我的“配对”课程:

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

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


基本上,我将把一张表送入生成器,并且我打算使用“ premier”和“ dernier”来创建一对彼此相距一定距离的配对...

最佳答案

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

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

10-07 13:20