Вы объявили два разных универсальных типа: E
(для Node
) и E extends Comparable<E>
(для DoublyLinkedList
).
Основная проблема здесь, вероятно, MyListIter
, чтонестатический внутренний класс и, как таковой, автоматически наследует определение DoublyLinkedList
E
.Поскольку он наследует определение E
, вы должны просто объявить его как
private class MyListIter implements ListIterator<E>
, но вы сделали его MyListIter<E>
, который переопределяет E
на нечто иное, чем E
что DoublyLinkedList
пользователей (неявные E extends Object
против E extends Comparable<E>
).
I считают, Node
должны работать как есть, поскольку это вложенный класс (с static
ключевое слово) и не наследует определение E
от DoublyLinkedList
.Однако, здесь, вероятно, имеет смысл объявить его как нестатический внутренний класс DoublyLinkedList
(private class Node
), такой же, как MyListIter
.
Кроме того, вы, вероятно, должны разрешить E
быть типом, который является подтипом некоторого типа, который реализует Comparable
, объявив его как E extends Comparable<? super E>
.