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;
        }
    }

問題は、dataItem ジェネリックで宣言されている内部変数内の変数から、メイン クラスの 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.
}

Node<Item>oldNode.data が Item 型であることを後続のコードでコンパイラが認識できるように、oldNode を として宣言する必要があります。

于 2013-02-18T05:59:24.333 に答える