Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿cuál es el significado de "this.this $ 0"?

¿Cuál es el significado de "this.this $ 0" en este código? ¿qué significa? Sé por qué utilizamos "esto", pero no tengo ni idea de "this.this $ 0"

class MainActivity$1 implements TextWatcher { public void afterTextChanged(Editable paramEditable) { } public void beforeTextChanged(CharSequence paramCharSequence, int paramInt1, int paramInt2, int paramInt3) { } public void onTextChanged(CharSequence paramCharSequence, int paramInt1, int paramInt2, int paramInt3) { this.this$0.ChangeToNumber(paramCharSequence.toString()); } } -----------------------or ---------------------- class MainActivity$2 implements View.OnClickListener { public void onClick(View paramView) { this.this$0.startActivity(new Intent(this.this$0, about.class)); } } 

  • Proguard ignora el archivo de configuración de la biblioteca
  • Módulo de enlace de proyecto externo en Android Studio
  • Iniciar aplicación desde el navegador url esquema
  • No se encontró JNI_OnLoad saltando init> Apagado de la aplicación
  • Uso de hormigas-fuente 7 o superior para permitir que el operador de diamante
  • Actualización de la aplicación de consola para desarrolladores
  • Android: la animación se acorta por la vista de los padres
  • Varios archivos dex definen landroid / support / annotation / AnimRes
  • ¿Por qué utilizar Service si se ejecuta en el mismo subproceso en android
  • ¿Hay alguna manera de reducir el espacio entre los íconos de elementos de acción en la barra de acción?
  • El carácter Unicode en Android no se muestra
  • ¿Cuál es la diferencia entre getIntent () y obtener la intención de savedInstanceState?
  • 3 Solutions collect form web for “¿cuál es el significado de "this.this $ 0"?”

    this.this $ 0 es igual a Main.access $ 0 Estos símbolos misteriosos por lo general corresponden a las clases internas anónimas. La máquina virtual de Java no sabe sobre ellos, sólo sobre las clases de nivel superior, por lo que el compilador de Java proporciona varias soluciones para que las clases internas funcionen.

    La clase local tiene una referencia implícita a la instancia de su clase inclusiva, 'this $ 0' corresponde a esta referencia en el código descompilado. JVM impide que las clases accedan a métodos privados de otras clases, de modo que el compilador genera varios métodos privados de paquete sintético como el acceso $ 0 para acceder a métodos privados de inclusión de instancia.

    Hay muchas otras características del lenguaje Java que se implementan con métodos sintéticos como genéricos y tipos de retorno covariante.

    Te sugiero que revises los enlaces: Decodificación Decompiled código fuente para Android

    y: Consejos de rendimiento

    No hay nada que lo impida (al lado de convenciones de nomenclatura decentes) de tener un miembro de instancia llamado this$0 y luego hacer referencia a él con la palabra clave this .

    Por ejemplo :

     public class SomeClass { int this$0; public SomeClass (int val) { this.this$0 = val; } } 

    La especificación de lenguaje Java 1.1 especifica que el nombre de un tipo que es un miembro de clase, cuando se transforma en código Java 1.0 con el propósito de generar bytecodes de máquina virtual Java, consiste en el nombre completo de la clase interna, excepto que cada uno .' character following a class name is replaced by a .' character following a class name is replaced by a $ '. Además, cada constructor de clase interna recibe la instancia de inclusión en un argumento prependido. Así es como podría verse el código fuente transformado del ejemplo FixedStack:

     public class FixedStack { ... (the methods omitted here are unchanged) public java.util.Enumeration elements() { return new FixedStack$Enumerator(this); } } class FixedStack$Enumerator implements java.util.Enumeration { private FixedStack this$0; // saved copy of FixedStack.this FixedStack$Enumerator(FixedStack this$0) { this.this$0 = this$0; this.count = this$0.top; } int count; public boolean hasMoreElements() { return count > 0; } public Object nextElement() { if (count == 0) throw new NoSuchElementException("FixedStack"); return this$0.array[--count]; } } 

    Cualquier persona que ya ha programado con clases de adaptador Java o C ++ ha escrito código similar a este, excepto que las variables de enlace deben definirse manualmente y explícitamente inicializadas en clases de adaptador de nivel superior, mientras que el compilador de Java 1.1 las crea automáticamente para clases internas.

    Cuando el Enumerador necesita referirse a los campos de la parte superior o de la matriz de la instancia de inclusión, indirectamente a través de un enlace privado denominado $ 0. La ortografía de este nombre es una parte obligatoria de la transformación de las clases internas en el lenguaje Java 1.0, por lo que los depuradores y herramientas similares pueden reconocer tales enlaces fácilmente. (La mayoría de los programadores son felizmente inconscientes de tales nombres.)

    (Nota: Hay algunas limitaciones en algunas implementaciones de Java 1.1, en las que la inicialización de este $ 0 se retrasa hasta que se ejecuta cualquier constructor de superclase. Esto significa que las referencias de nivel superior hechas por un método de subclase pueden fallar si el método pasa a ser ejecutado por el constructor de la superclase.)

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.