Почему мой родовой c связанный список получает эту ошибку? - PullRequest
0 голосов
/ 09 апреля 2020

Я не понимаю, почему этот код не работает, я полагаю, что я использую дженерики правильно, но метод явно не определен? Классы узлов и связанных списков полностью универсальны c, и я создаю узел разных типов (например, полукруг), которые совместно используют один и тот же абстрактный суперкласс PlanarShape, и пытаюсь добавить их в экземплярный список ссылок этого типа.

Соответствует часть основного класса

 LinkedList<PlanarShape> plygns = new LinkedList<PlanarShape>();

 Point p0 = new Point(Double.parseDouble(sc.next()), Double.parseDouble(sc.next()));
 Point p1 = new Point(Double.parseDouble(sc.next()), Double.parseDouble(sc.next()));

 SemiCircle smc = new SemiCircle(p0, p1);
 plygns.prepend(new Node<SemiCircle>(smc));

prepend получает ошибку prepend (Узел) не определен для типа Linkedlist

Метод Linkedlist prepend

public void prepend(Node<T> n) //add to head
{
   //Empty until error fixed
}

1 Ответ

0 голосов
/ 09 апреля 2020

У вас есть список PlanarShapes, и вы пытаетесь «добавить» узел с типом SemiCircle. В соответствии с тем, как вы написали prepend, он будет принимать узлы с типом PlanarShape только .

Предполагая, что SemiCircle является подтипом PlanarShape, вам нужно изменить prepend чтобы разрешить подтипы T с "подстановочным знаком":

public void prepend(Node<? extends T> n) {
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...