与泛型、接口和扩展混淆
Posted
技术标签:
【中文标题】与泛型、接口和扩展混淆【英文标题】: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
【问题讨论】:
是什么让您认为它不正确?您是否有编译器错误或意外行为? ***.com/questions/633585/… 的可能重复项 我会看看那个线程。我更新了我的编译器错误。 如此处所写,LList<String>
不能分配给List<String>
,而是List<LLNode<String>>
,因此插入调用需要LLNode
而不是字符串。
我怎样才能重组它以便 LList我想到了三个选项:
首先,将使用List<String>
:
public class LList<T extends Comparable<T>> implements List<T>
@Override
public void insert(T value)
...
这样就不再需要Node
了。
OR,您的第二个选项:您可以保持您实施的方式并使用List<LLNode<String>>
或,最后,如果您需要同时使用Node
和List<String>
,我想这就是您的需要(从问题中不清楚),并在内部使用Node
s,使用第一个选项,如果不可能,请更清楚您的需求,我会尽力帮助您。
问候。
【讨论】:
以上是关于与泛型、接口和扩展混淆的主要内容,如果未能解决你的问题,请参考以下文章