【问题标题】:Confusion with generics, interfaces, and extending与泛型、接口和扩展混淆
【发布时间】:2012-10-06 06:40:28
【问题描述】:

所以我正在尝试为通用链表和跳过列表编写程序。我还想在使用接口和超类时使用它,以备将来使用,但我似乎无法弄清楚如何使所有东西与所有泛型类型一起工作。

这是我现在的基本想法:

我的列表 ADT 和所有将扩展的节点类:

public class Node<K extends Comparable<K>> {
    K key;
    Object data;
    ...
}

public interface List<T> {
    public void insert(T value);
    public void delete(T value);
}

还有一个链表的例子:

public class LList<T extends Comparable<T>> implements List<LLNode<T>>
public class LLNode<K extends Comparable<K>> extends Node<K>

我这样做对吗?

编辑:更具体地说,当我尝试制作此类非常基本的实例时遇到问题,例如...

List<String> linkedList = new LList<String>();
List[] lists = {linkedList};
sets[0].insert("cookie");

这给了我一个编译器错误:java.lang.String cannot be cast to project.LLNode

【问题讨论】:

  • 是什么让您认为它不正确?您是否有编译器错误或意外行为?
  • 我会看看那个线程。我更新了我的编译器错误。
  • 如此处所写,LList&lt;String&gt; 不能分配给List&lt;String&gt;,而是List&lt;LLNode&lt;String&gt;&gt;,因此插入调用需要LLNode 而不是字符串。
  • 我怎样才能重组它以便 LList 工作?

标签: java generics interface comparable


【解决方案1】:

我想到了三个选项:

首先,将使用List&lt;String&gt;

    public class LList<T extends Comparable<T>> implements List<T>
    {
        @Override
        public void insert(T value)
        ...
    }

这样就不再需要Node了。

OR,您的第二个选项:您可以保持您实施的方式并使用List&lt;LLNode&lt;String&gt;&gt;

最后,如果您需要同时使用NodeList&lt;String&gt;,我想这就是您的需要(从问题中不清楚),并在内部使用Node s,使用第一个选项,如果不可能,请更清楚您的需求,我会尽力帮助您。

问候。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2015-07-11
    • 2018-04-09
    • 1970-01-01
    • 2021-09-20
    • 2021-11-07
    • 1970-01-01
    • 2016-09-28
    相关资源
    最近更新 更多