Estoy haciendo 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 hay un ".this" estático fuera de un nombre de clase? ¿Es esto algo de Java o 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 llamar "esto" del nombre de la clase en sí. También. El ".class" parece que se usa para la reflexión, con lo que estoy familiarizado en C #, pero cualquier idea sobre esto también sería bienvenida.
Gracias.
this
es siempre la clase más interna.this
se parecía tanto a JavaScriptthis
? Supongo que eso es lo que obtienes por no tener funciones de primera clase o lambdas :-)Uno a la vez:
La primera construcción se llama esto calificado . El propósito de la sintaxis es en el caso de que se encuentre en una clase interna (normalmente una clase interna anónima) y desee hacer referencia a la
this
de la clase externa en lugar de lathis
de la clase interna (anónima). El "calificado esto" sólo se puede utilizar en un contexto en elthis
que sería ambiguo. La cita de 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í misma".La segunda construcción se llama a
class literal
es la forma de hacer referencia al objeto Class que representa ese tipo. Se puede utilizar en cualquier contexto.fuente
qualified this
no declass literal
. He ampliado mi respuesta para que quede más claro.La sintaxis "Classname.this" es para clases internas. Si desea hacer referencia a la instancia adjunta del tipo "Outerclass", hágalo como "Outerclass.this".
NextActivity.class es simplemente el objeto Class que describe la clase "NextActivity".
fuente
NextActivity.class
en Java significatypeof(NextActivity)
en C #fuente
ClassName.this
se utiliza para hacer referencia a la instancia actual de una clase externa de una clase interna.fuente
se usa en clases anidadas para referirse a la instancia actual de la clase adjunta, ya que la palabra clave 'this' se refiere a la instancia de la clase nest.
fuente
Es confuso solo porque cuando usa " MainActivity.this ", parece que se está refiriendo a la clase y no al objeto. En realidad, cuando usa "this" siempre se está refiriendo al objeto actual, como dice la documentación de java se:
https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
Es sintácticamente peculiar.
fuente