2009-11-05 4 views
4
this.addTreeSelectionListener(new TreeSelectionListener() { 

     public void valueChanged(TreeSelectionEvent e) { 

      // How do I access the parent tree from here?   
     }   
    }); 
+3

부모 트리 란 무엇입니까? –

+0

아, 미안해. Java를 처음 접했을 때 TreeSelection이 인터페이스라는 것을 알지 못했습니다. – Goutham

답변

3

TreeSelectionListener은 인터페이스이므로 유일한 부모 클래스는 Object이고 super과 통화 할 수 있어야합니다.

둘러싸는 클래스의 일부 메소드를 호출하려는 경우 메소드 내에서 직접 호출 할 수 있습니다.

+0

내가 질문에 대한 충분한 정보를 얻지 못했기 때문에 답변을 downvoted 사람처럼 : "Java에서 익명 개체의 부모 개체에 어떻게 액세스합니까?" 나는 왜 익명의 클래스에서 super를 사용할 수 있는지 이해하지 못했습니다. super 또는 this에 대한 호출이 익명의 부모가 아닌 외부 클래스에 해당하기 때문에 당신이 할 수 없다고 생각했습니다. 흠 ... 죄송합니다 ... 나는 아직도 정확한 답을 모릅니다.하지만 제가 서두른 것처럼 보입니다 ... 실제적인 정답을 찾고 결정을 내리는 것이 더 좋을 것입니다 ... – yashaka

37

당신은 OuterClass.this 사용할 수 있습니다

public class Test { 

    String name; // Would normally be private of course! 

    public static void main(String[] args) throws Exception { 
     Test t = new Test(); 
     t.name = "Jon"; 
     t.foo(); 
    } 

    public void foo() { 
     Runnable r = new Runnable() { 
      public void run() { 
       Test t = Test.this; 
       System.out.println(t.name); 
      } 
     }; 
     r.run(); 
    } 
} 

을하지만, 방금 오히려 인스턴스 자체에 대한 참조를 얻는 것보다, 주위를 둘러싸는 경우에 회원에 액세스해야하는 경우, 당신은 단지 그것을 직접 액세스 할 수 있습니다 :

Runnable r = new Runnable() { 
    public void run() { 
     System.out.println(name); // Access Test.this.name 
    } 
}; 
+1

@Chris : 어떤 방법으로 질문에 대답하지 않습니까? 그것은 엔 클로징 인스턴스를 얻는 방법을 절대적으로 보여줍니다. 적어도, 그것은 내가 믿는 질문에 답합니다. 명확한 질문 ("부모 개체"라는 용어는 정의되지 않았습니다)과는 거리가 멀지 만 OP는 "인스턴스를 둘러 쌈"을 의미한다고 가정합니다.이 경우 질문에 답합니다. –

+0

Java 자체는 "부모"를 정의하지 않지만 객체 지향 프로그래밍 언어의 수퍼 클래스에 대한 일반적인 용어입니다. "Java parent"또는 "object-oriented parent"에 대한 웹 검색은 수백만 건의 조회수를 표시합니다. "클래스 다이어그램"에 대한 wikipedia의 빠른 참조를 보면 "일반화 관계에있는 수퍼 클래스 (기본 클래스)는"부모 ", 수퍼 클래스, 기본 클래스 또는 기본 유형이라고도합니다." –

+0

@Chris : 그렇습니다.하지만 익명 형식의 컨텍스트와 클래스의 주석을 무시합니다. 메서드의 주석은 * listener *와 분명히 구별되는 * tree *에 대해 말합니다. 나는 모호한 질문에 대한 나의 해석이 유효한 해석이라는 것을지지한다. –

관련 문제