2014-10-16 2 views
10

다음과 같은 문제점이 있습니다. 두 개의 중첩 된 익명 유형. 가장 내부 클래스 내부의 외부 익명 클래스에 대한 "this"참조에 액세스하려고합니다. 대개 이름이 지정된 외부 클래스 (익명 클래스를 "클래스 외부"라고 부름)에 익명 중첩 클래스가있는 경우 중첩 클래스 Outer.this.someMethod() 안에 입력합니다. 익명 인 경우 외부 클래스를 어떻게 참조합니까? 예제 코드 :익명 외부 클래스의 "this"참조에 액세스하는 방법

public interface Outer { 
    void outerMethod(); 
} 

public interface Inner { 
    void innerMethod(); 
} 
... 
public static void main(String[] args) { 
... 
new Outer() { 
    public void outerMethod() { 
     new Inner() { 
      public void innerMethod() { 
       Outer.this.hashCode(); // this does not work 
      } // innerMethod 
     }; // Inner 
    } // outerMethod 
}; // Outer 
... 
} // main 

내가 오류입니다

외부는 내가이 같은 기준을 복사 할 수 있다는 것을 알고

범위 내에서 액세스 할 수있는 유형의 없음 둘러싸 예 :

final Outer outerThisCopy = this; 

Inner 개체를 찾은 다음이 변수를 참조하십시오. 진짜 목표는 디버그 목적으로 outerThisCopy의 hashCodes와 new Inner 객체 (즉, Outer.this) 내부에서 액세스 한 객체를 비교하기 위해서입니다. 이 두 객체가 (내 경우에는) 다르다고 생각하는 좋은 주장이 있습니다. [상황 : "내부"클래스에서 음영 처리되지 않은 "외부"클래스에 구현 된 getter를 호출하면 해당 객체가 반환됩니다.

아이디어 "어떻게 접근합니까?" 익명 유형?

감사합니다.

+1

'int outerHashCode() {return hashCode(); }'익명의 외부 클래스. 내부 클래스에서는이 메서드에 액세스 할 수 있습니다. 그냥 전화 해. 나는 또 다른 접근법이 가능하지 않다는 것을 두려워한다. – Seelenvirtuose

답변

14

익명 클래스에는 이름이 없으므로 내부 클래스 또는 내부의 다른 익명 클래스에서 익명 클래스의 인스턴스에 직접 액세스 할 수 없습니다. 그러나 메소드를 통해 외부 클래스에 대한 참조를 얻을 수 있습니다.

new Outer() 
{ 
    public Outer getOuter() 
    { 
     return this; 
    } 

    public void outerMethod() 
    { 
     new Inner() 
     { 
      public void innerMethod() 
      { 
       getOuter().hashCode(); 
      } 
     }; 
    } 
}; 
+1

고마워요. 이것은 잘 동작했다. – egelev

+0

좋습니다. 그러나 이것은 어떻게 작동합니까? –

관련 문제