【问题标题】:Why does my generic linkedlist get this error?为什么我的通用链表会出现此错误?
【发布时间】:2020-07-21 13:39:09
【问题描述】:

我不明白为什么这段代码不起作用,我相信我正确使用了泛型,但方法显然没有定义? node 和linkedlist 类是完全通用的,我正在创建一个共享相同抽象超类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(Node) is undefined for type Linkedlist

链表方法前置

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

【问题讨论】:

  • 你有自己的类型Linkedlist吗? Java 区分大小写。而且已经有java.util.LinkedList(里面没有这个方法)。
  • 所以我不能创建自己的 LinkedList 类而不包括 java 类?
  • 可以,但我们无法判断您在这里使用的是哪一个;或您的版本的大写。这不是一个可重现的例子。
  • LinkedList 是我自己的类,我应该将它重命名为linkedList 还是什么?
  • 如果你必须自己写,试试MyLinkedList;否则,请使用java.util.LinkedList(但这可能不是实际问题)-您应该将您的问题编辑Minimal, Reproducible Example

标签: java generics inheritance polymorphism


【解决方案1】:

您有一个 PlanarShapes 列表,并且您正在尝试“预先添加”一个类型为 SemiCircle 的节点。按照您编写的 prepend 方式,它将接受类型为 PlanarShape only 的节点。

假设 SemiCirclePlanarShape 的子类型,您需要更改 prepend 以允许带有“通配符”的 T 子类型:

public void prepend(Node<? extends T> n) {
   ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2022-01-04
    • 2018-12-06
    相关资源
    最近更新 更多