泛型和静态内部类的麻烦

时间:2013-02-18 05:50:57

标签: java generics

所以我有一个使用泛型的类:

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. 

思考?

1 个答案:

答案 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。