所以我有一个使用泛型的类:
public class Deque<Item> implements Iterable<Item>
在该类中,我有一个静态内部类,它也使用相同的泛型:
public static class Node<Item> {
Node next; // pointer to next node
Node prev; // pointer to previous node
Item data; // data contained in node
public Node(Item item){
this.data = item;
}
}
麻烦的是,当我尝试将内部变量中的data
变量(使用Item泛型声明)分配给在主类中使用Item泛型声明的变量时,如下所示: / p>
Item data = oldNode.data;
我收到以下错误:
type mismatch: cannot convert Object to Item.
思考?
答案 0 :(得分:3)
你是如何宣布oldNode的?
看看这个方法:
private void foo(Item item) {
Node<Item> oldNode = new Node<Item>(item); // declaration using generics.
Item data = oldNode.data; // compiles fine
Node oldNode2 = new Node(item); // un-generic declaration. Compiler doesn't know if it's node a Node of something else.
Item data = oldNode2.data; // compile error: type mismatch: cannot convert Object to item.
}
您必须将oldNode声明为Node<Item>
,以便编译器在后续代码中知道oldNode.data的类型为Item。