nativas - query native java
Usando "esto" con el nombre de clase (7)
Es confuso solo porque cuando usa " MainActivity.this ", parece que se está refiriendo a la clase y no al objeto. En realidad, cuando usas "this", siempre te estás refiriendo al objeto actual, como dice la documentación de java se:
https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
Dentro de un método de instancia o un constructor, esta es una referencia al objeto actual - el objeto cuyo método o constructor se está llamando. Puede hacer referencia a cualquier miembro del objeto actual desde un método de instancia o un constructor usando esto.
Es sintácticamente peculiar.
Estoy haciendo la programación de Android y estaba aprendiendo sobre Intents, cuando vi un constructor que, para mi mente entrenada en C #, parecía funky. La llamada fue:
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
Ambos parámetros son nuevos para mí. ¿Cómo está un ".this" estático fuera de un Nombre de clase? ¿Es esto algo de Java o algo de Android? Supongo que es lo mismo que decir "esto", ya que estoy en el contexto de CurrentActivity
, pero no entiendo cómo se puede cancelar "this" con el nombre de Class. También. La ".clase" parece que se usa para la reflexión, con la que estoy familiarizado en C #, pero cualquier idea sobre esto sería bienvenida también.
Gracias.
La sintaxis "Classname.this" es para clases internas. Si desea hacer referencia a la instancia adjunta de tipo "Outerclass", entonces hágalo como "Outerclass.this".
NextActivity.class es simplemente el objeto Class que describe la clase "NextActivity".
Por lo general, puedes usar solo this
. Pero, a veces this
hace referencia a una clase interna ... así que, por ejemplo:
Button button = (Button)findViewById(R.id.ticket_details_sell_ticket);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// it will be wrong to use only "this", because it would
// reference the just created OnClickListener object
Intent login = new Intent(ClassName.this, Login.class);
startActivityForResult(login, LOGIN_REQUEST);
}
});
Uno a la vez:
El primer constructo se llama calificado esto . El propósito de la sintaxis es el caso en el que se encuentre en una clase interna (generalmente una clase interna anónima) y desee hacer referencia a this
de la clase externa en lugar de la clase interna (anónima). El "calificado esto" solo puede usarse en un contexto donde this
sería ambiguo. La cita del JLS "Es un error en tiempo de compilación si la expresión ocurre en una clase o interfaz que no es una clase interna de la clase T o T en sí".
La segunda construcción se denomina class literal
es la forma de referenciar el objeto Clase que representa ese tipo. Se puede usar en cualquier contexto.
ClassName.this
se utiliza para hacer referencia a la instancia actual de una clase externa de una clase interna.
NextActivity.class
en java significa typeof(NextActivity)
en C #
<ClassName>.this
se usa en clases anidadas para referirse a la instancia actual de la clase adjunta, ya que la palabra clave `this ''hace referencia a la instancia de la clase de jerarquía.
void demoThis() {
new java.lang.Object() {
void demoThis() {
System.err.println("`this'' is an instance of: " +
this.getClass().getName());
System.err.println("`Siht.this'' is an instance of: " +
Siht.this.getClass().getName());
}
}.demoThis();
new NestedSiht().demoThis();
}
public static void main(String [] args) {
new Siht().demoThis();
}
}