-3

このパッケージでこのノードを定義しました:

package provided;
public interface Node{
    public Node getNext();
} 

ここでノードを使用したいのですが、ネストされたクラス「LinkedListIterator」の問題です。ノードのメソッドを表示できません。

import provided.Node;
class LinkedList {
    private Node head;
    head.getNext(); // there is no error here, the method getNext() is available 
    class LinkedListIterator <Node> implements Iterator<Node> {
        private Node next_node;
            public Node next(){
                return next_node.getNext(); // The method getNext() is 
                                            // undefined for the type Node 
            }
    }
}
4

2 に答える 2

4

実際、ここでの問題は、クラスノードにgetNext()メソッドがないことではありませんが、Genericsが関与しているため、イテレータをclass LinkedListIterator <Node> implements Iterator<Node> {今のように宣言しました。タイプNodeの変数を宣言すると、コンパイラはそれを次のように受け取ります。 Name'Node'で定義されたGenericTypeであり、これを解決するには、次のノードの宣言を次のように変更するprivate provided.Node next_node;か、または代わりに、Genericの別の名前を定義します(例:Type、tなど)。

`

class LinkedListIterator <Node> implements Iterator<Node> {
    private provided.Node next_node;

        @Override
        public Node next() {
            return next_node.getNext();
        }

`

于 2012-04-29T11:13:46.937 に答える
0

あなたはあなたのインターフェースにこれを持っています

 public Integer getNext();

しかし、あなたの匿名クラスにはこれが定義されています

Public Node next() {
   return next_node.getNext() 

これはリターンタイプと一致しません。インターフェイスを次のように変更する必要があります

 public Node getNext();
于 2012-04-29T11:05:20.313 に答える