Пользовательский итератор с использованием универсальных типов

Я пытаюсь создать расширение 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;
    }
}

По сути, я собираюсь передать таблицу в генератор, и я собираюсь использовать «премьер» и «дернье» для создания пар на заданном расстоянии друг от друга ...

Это org.apache.commons.lang3.tuple.Pair или какой-то другой класс Pair? Если это ваш собственный класс, не могли бы вы показать нам код?

Dawood ibn Kareem 09.06.2018 04:21

Не могли бы вы опубликовать весь свой класс? О BiGramme, this.debut, this.dernier можно так много догадываться ...

Mạnh Quyết Nguyễn 09.06.2018 04:28

Я отредактировал пост с запрошенной информацией.

ssalogel 09.06.2018 05:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
194
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша проблема в том, что в вашем объявлении public class BiGramme <T>, T скрывает T, который вы объявили в public class GenerateurBiGramme <T>. Теперь у вас есть два разных параметра типа для GenerateurBiGramme.BiGramme, но, к сожалению, оба они называются T.

Вам не нужен T в объявлении BiGramme, потому что это внутренний класс, поэтому он уже имеет доступ к параметрам типа внешнего класса, GenerateurBiGramme. Просто измените декларацию на public class BiGramme, без T. Также удалите <> из линии return new BiGramme(delta);. Это сработало для меня.

Другие вопросы по теме