【发布时间】:2017-02-11 15:03:54
【问题描述】:
我正在尝试使用泛型在 Java 中编写我自己的 Linked List 类。链表应该适用于我创建的两个不同的节点类。我希望能够调用链接列表中使用的节点类的方法,但显然它不像我尝试的那样工作。每个节点类将具有所有相同的方法(和方法名称),但每个节点的方法将做不同的事情。对此我有几个问题:
1) 在泛型类型变量上调用方法的“解决方法”(如果有的话)是什么。就我而言,我试图从我的链表类中调用我的节点类的方法。
2) 如何确保我的 Linked List 可以拥有的两种数据类型是我定义的两个节点类?
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();
}
}
谢谢!
【问题讨论】:
-
你需要让 node1 和 node2 扩展一个公共抽象类,这样你就可以只接受这个类,比如
T extends abstractClass -
只是一个想法(如果不适合您的目的,请丢弃):您可以拥有一个抽象的
Node类,其中包含Node需要的所有内容,只有doStuff方法是抽象的,具有不同的具体子类Node1和Node2中的实现。您的列表类可以声明为public class LinkedList<T extends Node>。
标签: java generics linked-list