我正在尝试使用泛型在Java中编写自己的Linked List类。链表应该与我创建的两个不同的Node类一起使用。我希望能够调用我的链接列表中使用的节点类的方法,但显然它不能像我尝试的那样工作。每个节点类都将具有所有相同的方法(和方法名称),但每种节点的方法将执行不同的操作。有了这个,我有几个问题:
1)在泛型类型变量上调用方法的“解决方法”(如果有的话)是什么。在我的例子中,我试图从我的链表类中调用我的节点类的方法。
2)如何确保链接列表中只有两种数据类型是我定义的两个节点类?
3)我是否认为这完全错了?即,我应该以完全不同的方式这样做吗?
以下是代码的简化版本。
public class Node1 {
public int stuff1;
public Node1 nextNode;
Node1() {
this.nextNode = null;
}
public void doStuff(){
System.out.println("Node 1 did stuff");
}
}
public class Node2 {
public int stuff2;
public Node2 nextNode;
Node2() {
this.nextNode = null;
}
public void doStuff(){
System.out.println("Node 2 did other stuff");
}
}
public class LinkedList<T>{
public T first; // do I need to construct/instantiate this too?
public void doStuff() {
first.doStuff;
}
public static void main(String[] args){
LinkedList<Node1> node1 = new LinkedList<Node1>;
LinkedList<Node2> node2 = new LinkedList<Node2>;
node1.doStuff();
node2.doStuff();
}
}
谢谢!
答案 0 :(得分:1)
对于您的具体示例:
interface
指定doStuff()
,将其称为CanDoStuff
LinkedList
类定义为LinkedList<T extends CanDoStuff>
但是,如果要定义仅包含LinkedList<Node1>
元素和/或Node1
的{{1}},则使用泛型会应用更多内容。如果你真的想限制列表内容永远只有那两个类,你根本不需要使用泛型。您LinkedList<Node2>
替换T
中LinkedLIst
的位置(并使该类非通用)。
在这种情况下,当您从列表中检索元素时,它们将返回CanDoStuff
,如果您想调用特定于某个具体类的方法,则需要向下转换引用,除非您可以将方法声明移动到CanDoStuff
并在CanDoStuff
和Node1
中实现。