2014-06-08 4 views
-2

나는 그것을 기대하지만이 작품 것을 발견했습니다되지 않음 :Java : 익명의 내부 클래스가 외부 클래스의 메서드에 액세스 할 수있는 이유는 무엇입니까? 최근

내가 Outer.this.foo을 기대
class Outer 
{ 
    Button b; 

    void foo() {} 


    void bar() 
    { 
     b = new Button(); 
     b.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void OnClick() 
      { 
       foo(); 
      } 
     }); 
    } 
} 

() 필요하지만 보인다 될 단순히 foo는() 또한 작동합니다. 누군가이 언어에 정확히 언제 추가되었는지 말할 수 있습니까? 정확한 이름 확인 규칙을 이해할 수 있도록 도와주세요. 감사!

질문 :

1) 왜이 작업은?

2)이 방법이 효과가 있다면 왜 "외부"라는 구문이 필요합니까?

+0

이것은 언어 디자인에 대한 불만입니까? –

+0

아니요, 여기서는 정확한 이름 확인 규칙을 이해하고 싶습니다. –

+0

나는 당신의 질문을 매우 유용하다고 생각하지 않습니다. 또한 오프 사이트 리소스를 요구하는 것은 주제 밖입니다. –

답변

2

내부 클래스가 도입 된 이후로 이와 같은 메서드를 호출 할 가능성이있었습니다. 메서드가 호출되는 인스턴스를 확인하는 메커니즘은 Java Language Specification, Section 15.12.4.1., Compute Target Reference (If Necessary)에 자세히 설명되어 있습니다.

아마도 "Qualified this"이 필요하지 않다는 사실을 알리고 계실 것입니다. 그러나이 this은 주로 내부 인스턴스와 외부 인스턴스에 동일한 서명이있는 메서드가있을 때 모호성을 해결하기위한 것입니다.

+0

정말 고마워요, 정확히 제가 알아야 할 것이 었습니다. –