2014-07-04 2 views
2

나는 다음과 같은 클래스를 정의 :회원에 액세스 할 수없는 이유는 무엇입니까?

public static class Solution{ 
    public static class Node{ 
    int id; 
    public double x; 
    public double y; 
    } 
    public static class Tree<Node>{ 
    Node root; 
    boolean contains(Node n){ 
     if (n == null) 
      return false; 
     if (n.x == root.x && n.y == root.y) 
      return true; 
     else 
      return ....; //something else 
    } 
} 

문제는 내가 객체 nroot과의 yx 필드에 액세스 할 수 없다는 것입니다 : 나는 두 개의 내부 클래스를 정의한 클래스 솔루션에서

public static class Solution{ 
    .... 
} 

왜 그런지 몰라? EDIT : Top Coder 용으로 작성했기 때문에 Node 클래스를 분리 할 수 ​​없으며 단 하나의 클래스 만 제출해야합니다. 필드 x와 y는 공개로 설정되어 있지만 여전히 액세스 할 수 없습니다.

+0

어떤 노드를 확장합니다. Solution 클래스 외부에 Node 클래스를 정의한 다음 작동하는지 확인하십시오. – skjindal93

+0

'Tree '및'Solution.Node root;'를 사용해 보셨습니까? 포함되지 않은 가져 오기를 보지 않고도 다른 'Node' 클래스를 가져 오지 않았 음을 확인할 수 없습니다. – Qix

+0

확실하게 테스트 할 수는 없지만'import Solution.Node; '를 시도해 볼 수도 있습니다. – Qix

답변

4

Node (여기에 Tree<Node>)의 Node 클래스가 숨겨져 있기 때문입니다. 그래서 그것을 알고

<T extends Node> 

당신이 그것을에 전달 (그리고 등 x을 알고) 또한 하나의 일을 할 수

+0

이것은 의미가 없습니다. 'T extends Node'를 어디에 두어야할까요? 'T'는 무엇을 할 것인가? – Qix

+0

일반 사항입니다. T는 제네릭의 일반적인 이름입니다. T는 Node를 확장하는 모든 클래스를 말할 것이므로 Node는 OK입니다. 다음을 읽으십시오. http://docs.oracle.com/javase/tutorial/java/generics/ 내부에서 <>를 사용하여 일반 NOT THE TYPE의 이름을 선언하십시오! –

+0

제네릭이 무엇인지 이해합니다. OP의 문제를 어떻게 도울 지 모르겠다. – Qix

관련 문제