我有以下设计:
我有一个抽象类实例
,
我有一个扩展 Instance
的类 Library
和
我有一个类 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;
}
}
节点
在哪里
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 行出现错误:
Type mismatch - cannot convert from Instance to T.
这段代码有什么问题?
最佳答案
我想说Node.data
是对 Instance
的引用目的?如果是这种情况,编译器将无法自动更改 Instance
到 T
,因为即使 T
是 Instance
对象 ( T extends Instance
),任何给定的 Instance
可能不是T
.
Java 泛型教程对此进行了解释:http://docs.oracle.com/javase/tutorial/extra/generics/subtype.html
此外,在您的 List<T>
中类,您应该指定 Iterator
和ListIterator
作为通用使用 Iterator<T>
和ListIterator<T>
,否则编译器将无法正确处理泛型。您的Node
引用也需要是通用的:Node<T>
因此你应该使用
private Node<T> current;
和
public T next() {
Node<T> temp=current;
current=current.next;
return temp.data;
}
当您对泛型类使用原始类型时,编译器通常会警告您。
关于java - java中的通用迭代器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8520821/