【发布时间】:2011-12-15 13:26:20
【问题描述】:
我有以下设计:
我有一个抽象类Instance,
我有一个类Library 扩展Instance 和
我有一个类 File 也扩展了 Instance
我已经创建了自己的链表实现,它的定义如下:
public class List<T extends Instance> implements Iterable {
//some other code here
public Iterator iterator(){
return new ListIterator(this);
}
现在我已经创建了一个类
public class ListIterator<T extends Instance> implements Iterator<T> {
private List thisList;
private Node current;
public ListIterator(List l){
thisList=l;
current=thisList.head.next;
}
@Override
public boolean hasNext() {
if(current==null)
return false;
return false;
}
@Override
public T next() {
Node temp=current;
current=current.next;
return temp.data;
}
}
Node 在哪里
public class Node<T extends Instance> {
public Node<T> next;
public Node<T> prev;
public T data;
public Node(T data,Node prev, Node next){
this.data=data;
this.prev=prev;
this.next=next;
}
}
所以我的问题如下:return temp.data这一行出现错误:
类型不匹配 - 无法从 Instance 转换为 T。
这段代码有什么问题?
【问题讨论】:
-
如果您发布 Node 类的代码,将更容易弄清楚发生了什么。还有……这不是……作业,是吗?
-
因为 (1) 如果不是为了作业(或至少是私人学习),那么自己实施 List 可能是个坏主意,以及 (2) 如果它是对于家庭作业,那么我们应该帮助你从错误中吸取教训,而不是给你答案。
-
顺便说一句,如果您使用的是 Eclipse、IntelliJ 等 IDE,请打开选项以在您使用原始类型而不是泛型时发出警告。它会给你一个额外的指针来解决这类问题。 (尽管如果你深入研究泛型,你也会遇到一些你无法摆脱的警告。泛型是一种痛苦。)
-
还有一个提示 - 然后我就不再打扰你了 - 阅读 Josh Bloch 的 Effective Java,其中包含一个解释(比我更有说服力)为什么你不应该编写自己的列表的项目 -当然,除了作为学习练习。顺便说一句,Josh Bloch 是编写 Java 集合 API 的工程师之一。