Пользовательский универсальный список Java: ошибка метода add ()

1

У меня есть задача, в которой я должен реализовать метод add() для настраиваемого общего списка. В моем коде у меня есть следующая структура:

public abstract class MyGenericListAbstract<T> {
    protected transient T head;
    protected transient T tail;
    protected transient int size;

    ...
}

public final class MyEmptyList<T> extends MyGenericListAbstract {

private T[] list;

... 
public final void add(T e)
{
    this.getList()[this.size()] = (T) e;
}

...

private T[] getList()
{
    return this.list;
}

}

Проблема, которую я сейчас имею в виду, заключается в том, что когда я пытаюсь сделать это:

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        MyGenericListAbstract <Integer> list0   = new MyEmptyList();
        list0.add(new Integer(3));
    }

}

Я получаю следующую ошибку:

Изображение 174551

и я не могу понять, почему...

Кто-нибудь может мне помочь, пожалуйста!

Весь код доступен здесь, а также некоторые документы о задаче здесь. Если вы заметите некоторые недостатки, я буду рад услышать их!

Благодарю!

  • 3
    Хорошо, есть ли у MyGenericListAbstract метод add ?
  • 6
    Это неудачно для начала: public final class MyEmptyList<T> extends MyGenericListAbstract . Это использует необработанный тип MyGenericListAbstract . Попробуйте public final class MyEmptyList<T> extends MyGenericListAbstract<T> . Аналогичным образом, вам, вероятно, следует использовать MyGenericListAbstract <Integer> list0 = new MyEmptyList<>(); , Избегайте необработанных типов, насколько это возможно.
Показать ещё 3 комментария
Теги:
generics

1 ответ

3
Лучший ответ

Вы MyGenericListAbstract <Integer> ссылку на MyGenericListAbstract <Integer> в list0 тогда как у нее нет метода add, как вы уже говорили в комментарии. Компилятор не видит этот метод на основе ссылки на список.

Вы должны либо изменить ссылочный тип на MyEmptyList <Integer> либо перенести метод add(T e) в класс MyGenericListAbstract.

PS. Проблема не связана с дженериками, это просто основной принцип наследования Java.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню