我正在尝试构建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);
。这对我有用。