2012-04-29 2 views
-3

내가이 패키지에이 노드를 정의 :중첩 클래스에서 가져온 패키지를 사용할 수없는 이유는 무엇입니까?

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 
      } 
    } 
} 
+1

전체 오류를 제공 할 수 있습니까? 이 코드에 다른 문제가 있습니다 : LinkedListIterator.next() delcares는 Node를 리턴하고, next_node.getNext()는 Integer를 리턴합니다. – amit

+0

코드 예는 지저분한 것입니다. 나는 그 문제가 getNext()가 Node를 반환하지 않을 것이라고 생각한다. 나는 정의되지 않았다. –

+0

'next' 서명에''Public'' 값이 있습니다. 그것은 바로 오류입니다. 먼저 문제를 해결하고 다음 문제로 넘어갑니다. –

답변

0
: 여기

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

내가 노드, 중첩 된 클래스 "LinkedListIterator"의 문제를 사용하려면, 내 노드 방법을 참조 할 수 없습니다

당신은 당신의 인터페이스

public Integer getNext(); 

이있어하지만 익명 클래스는이

을 정의하고있다
Public Node next() { 
    return next_node.getNext() 

반환 유형이 맞지 않습니다. 이 사실이

public Node getNext(); 
+2

사실, 지정된 오류를 생성하지 않기 때문에 대답이 아닙니다. [그런 이유로 나는 그것을 코멘트로 넣었다]. 또한 OP의 편집 내용이 일치하지 않습니다. – amit

+0

나는 next_node를 입력 할 때 이클립스를 사용하면서 여전히 같은 문제를 수정했다. 그것은 나에게 메서드를 보여 주지만 중첩 된 클래스에서 정의 된 인터페이스 노드를 보지 못하는 것처럼 인터페이스 메서드를 전혀 얻지 못한다. – nabil

4

처럼 뭔가에 인터페이스를 변경해야, 문제는 여기에 클래스 노드가 GETNEXT() 메소드가없는, 그러나 그것 때문에 참여 제네릭의, 당신은 선언 한 것이 아니다 당신의 Iterator를 class LinkedListIterator <Node> implements Iterator<Node> {으로 변경하면 Node 유형의 변수를 선언 할 때 컴파일러가 Name 'Node'로 정의 된 일반 유형이되도록합니다. 다음 노드의 선언을 private provided.Node next_node;으로 변경하거나 generic 예를 들어 .. 유형, t 등 ..

`

+0

좋은 캐치. +1. – amit

+0

그래, 내가 그걸 이미하고 작동하지만, 컴파일러가 제네릭에서 내 정의 된 노드를 가져 가지 않을 이유를 이해하지 못 했어! LinkedListIterator 는 Iterator <제공된 노드. 노드>를 구현합니까? – nabil

+0

@nabil 일반 유형으로 전달하는 모든 것은 반환되는 실제 클래스 이름이나 유형이 아닌 단지 이름 일뿐입니다. http://docs.oracle.com/javase에서 유형 삭제에 대한 자세한 내용을 원할 수도 있습니다. /tutorial/java/generics/erasure.html, 이는 문제를 이해하는 데 도움이되며, 여전히 이유가 확실하지 않은 경우를 대비하여 작성하십시오 –