0

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

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 泛型声明的变量时,如下所示:

Item data = oldNode.data;

我收到以下错误:

type mismatch: cannot convert Object to Item. 

想法?

4

1 回答 1

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 声明为 a Node<Item>,以便编译器在后续代码中知道 oldNode.data 的类型为 Item。

于 2013-02-18T05:59:24.333 回答