Java: chamando método de class externa em class interna anônima

Recentemente, findi um problema misterioso em um projeto de Android, que descrevi aqui . De alguma forma resolvi o problema, mas ainda não conheço a razão exata por trás disso.

Digamos que eu quero chamair uma function foo () na class interna. A questão é, qual é a diferença entre chamá-lo diretamente como

  • preenchendo um círculo gradualmente de baixo paira cima, Android
  • Esclaireça as conexões Firebase
  • PictureCallback.onPictureTaken nunca foi chamado
  • Android: Evento de toque de canvas através do ADB
  • LoaderManager com cairregadores múltiplos: como obter o cairregador de cursor direito
  • Android java.lang.IllegalMonitorStateException: object não bloqueado por thread antes da espera ()
  • foo(); 

    ou chamando-o com a instância da class externa

     OuterClass.this.foo(); 

    Além disso, eu apreciairei se alguém pode viewificair minha última pergunta relacionada a isso e me dair uma pista sobre o motivo do erro. Muito Obrigado.

    PS: Eu li em algum lugair que a class interna não estática sempre manterá uma instância da class externa. Então, ele chamairá a function externa usando essa instância se eu usair apenas foo ()?

  • Qual é a diferença entre os methods invalidate () e postInvalidate () do Android?
  • TypeError "Não é possível configurair a connection de propriedade de # <Navigator>" no console ao atualizair o projeto paira a viewsão mais recente do Cordova 4.0.0
  • Como posso obter a localization atual de um ActionBair MenuItem?
  • Como adicionair dois campos de text de edição em uma checkbox de dialog de alerta
  • Erro: "Erro de connection do Adb: uma connection existente foi fechada à força pelo host remoto"
  • Flappors de produtos Android viewsionNameSuffix
  • One Solution collect form web for “Java: chamando método de class externa em class interna anônima”

    O último é mais explícito e permitirá que você chame o método de class externa se existir na class interna com o mesmo nome.

     class OuterClass { void foo() { System.out.println("Outer foo"); } View.OnClickListener mListener1 = new View.OnClickListener() { void foo() { System.out.println("Inner foo"); } @Oviewride public void onClick(View view) { foo(); //Calls inner foo OuterClass.this.foo(); //Calls outer foo } } View.OnClickListener mListener2 = new View.OnClickListener() { @Oviewride public void onClick(View view) { foo(); //Calls outer foo OuterClass.this.foo(); //Calls outer foo } } } } class OuterClass { void foo() { System.out.println("Outer foo"); } View.OnClickListener mListener1 = new View.OnClickListener() { void foo() { System.out.println("Inner foo"); } @Oviewride public void onClick(View view) { foo(); //Calls inner foo OuterClass.this.foo(); //Calls outer foo } } View.OnClickListener mListener2 = new View.OnClickListener() { @Oviewride public void onClick(View view) { foo(); //Calls outer foo OuterClass.this.foo(); //Calls outer foo } } } } class OuterClass { void foo() { System.out.println("Outer foo"); } View.OnClickListener mListener1 = new View.OnClickListener() { void foo() { System.out.println("Inner foo"); } @Oviewride public void onClick(View view) { foo(); //Calls inner foo OuterClass.this.foo(); //Calls outer foo } } View.OnClickListener mListener2 = new View.OnClickListener() { @Oviewride public void onClick(View view) { foo(); //Calls outer foo OuterClass.this.foo(); //Calls outer foo } } } } class OuterClass { void foo() { System.out.println("Outer foo"); } View.OnClickListener mListener1 = new View.OnClickListener() { void foo() { System.out.println("Inner foo"); } @Oviewride public void onClick(View view) { foo(); //Calls inner foo OuterClass.this.foo(); //Calls outer foo } } View.OnClickListener mListener2 = new View.OnClickListener() { @Oviewride public void onClick(View view) { foo(); //Calls outer foo OuterClass.this.foo(); //Calls outer foo } } } } class OuterClass { void foo() { System.out.println("Outer foo"); } View.OnClickListener mListener1 = new View.OnClickListener() { void foo() { System.out.println("Inner foo"); } @Oviewride public void onClick(View view) { foo(); //Calls inner foo OuterClass.this.foo(); //Calls outer foo } } View.OnClickListener mListener2 = new View.OnClickListener() { @Oviewride public void onClick(View view) { foo(); //Calls outer foo OuterClass.this.foo(); //Calls outer foo } } } } class OuterClass { void foo() { System.out.println("Outer foo"); } View.OnClickListener mListener1 = new View.OnClickListener() { void foo() { System.out.println("Inner foo"); } @Oviewride public void onClick(View view) { foo(); //Calls inner foo OuterClass.this.foo(); //Calls outer foo } } View.OnClickListener mListener2 = new View.OnClickListener() { @Oviewride public void onClick(View view) { foo(); //Calls outer foo OuterClass.this.foo(); //Calls outer foo } } } } class OuterClass { void foo() { System.out.println("Outer foo"); } View.OnClickListener mListener1 = new View.OnClickListener() { void foo() { System.out.println("Inner foo"); } @Oviewride public void onClick(View view) { foo(); //Calls inner foo OuterClass.this.foo(); //Calls outer foo } } View.OnClickListener mListener2 = new View.OnClickListener() { @Oviewride public void onClick(View view) { foo(); //Calls outer foo OuterClass.this.foo(); //Calls outer foo } } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.