También ayuda a comprender cómo crea Java una clase interna anónima. Cómo implementa Java esa clase en particular.
Java necesita que la variable sea definitiva porque el compilador debe conocer el tipo de ese objeto en tiempo de compilación. El compilador generará un campo dentro de la implementación anónima de la clase interna (en este caso 'et').
Si el tipo no es definitivo, ¿cómo determinaría el compilador cómo crear la implementación de la clase interna? Básicamente, al declarar el campo final, le está dando más información al compilador de Java.
Código que no ayuda a que el compilador, no se compilará la clase interna anónima:
Object et;
et = a ? new Object() : new EditText();
...
Con el código anterior, el compilador Java no puede realmente construir el clase interna anónima.
su código:
final de EditarTexto et = (EditarTexto) findViewById (R.id.t);
...
new Button.OnClickListener$1(){
public void onClick(View v)<br>
{
Intent on=new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+et.getText()));
startActivity(on);
}
});
... El compilador Java creará una clase de código de bytes, una implementación de ese bloque clase interna que ya ha proporcionado que podría tener este aspecto.
public class OnClickListener$1 {
private final EditText et ; <---- this is important
public OnClickListener$1(final et) {
this.et = et;
}
public void onClick(View v)<br>
{
Intent on=new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+et.getText()));
startActivity(on);
}
}
Puede probar el pseudo código que he proporcionado por la búsqueda de la clase de código de bytes anónimo $ 1 y descompilar el archivo de código de bytes.
androide: ¿Puede decirnos, qué error que había conseguido en su Logcat? –
no es tiempo de ejecución era un error de tiempo de compilación. Era "No se puede hacer referencia a una variable no final y dentro de una clase interna definida en un método diferente" esto es lo que obtuve ... –