Я пытаюсь создать расширение 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) в Pair не может применяться к (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;
}
}
По сути, я собираюсь передать таблицу в генератор, и я собираюсь использовать «премьер» и «дернье» для создания пар на заданном расстоянии друг от друга ...
Не могли бы вы опубликовать весь свой класс? О BiGramme, this.debut, this.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);. Это сработало для меня.
Это
org.apache.commons.lang3.tuple.Pairили какой-то другой классPair? Если это ваш собственный класс, не могли бы вы показать нам код?