2014-06-08 1 views
-2

Dernièrement, j'ai trouvé que cela fonctionne, même si je pense qu'il ne:Java: Pourquoi les classes internes anonymes peuvent accéder aux méthodes de la classe externe?

class Outer 
{ 
    Button b; 

    void foo() {} 


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

J'attends Outer.this.foo() être nécessaire, mais il semble que le simple fait foo() fonctionne aussi. Quelqu'un pourrait-il me dire quand exactement cela a été ajouté à la langue? S'il vous plaît, aidez-moi à comprendre les règles de résolution de noms exactes ici. Merci!

Les questions:

1) Pourquoi est-ce travail?

2) Si cela fonctionne, pourquoi avons-nous besoin de la syntaxe "Outer.this"?

+0

Est-ce une plainte contre la conception du langage? –

+0

Non, je veux juste comprendre les règles de résolution de nom exact ici. –

+0

Je ne trouve pas votre question très utile. Demander également des ressources hors site est hors sujet. –

Répondre

2

La possibilité d'appeler de telles méthodes existe depuis l'introduction des classes internes. Le mécanisme de résolution de l'instance à laquelle une méthode est appelée est décrit en détail dans Java Language Specification, Section 15.12.4.1., Compute Target Reference (If Necessary).

Vous faites probablement référence au fait que vous n'avez pas besoin de "Qualified this". Mais ce this est principalement destiné à résoudre les ambiguïtés lorsque l'instance interne et l'instance externe ont une méthode avec la même signature.

+0

Merci beaucoup, c'est exactement ce que j'avais besoin de savoir. –

Questions connexes