java - interview - HashMap.this.clear() ¿Qué significa esto? ¿Cómo funciona esto?
java list (2)
HashMap.this.clear();
llama a la instancia actual de HashMap
, mencionó que está llamando desde una InnerClass, así es como se hace referencia a la clase Outter.
En la clase HashMap
hay un KeySet
clase KeySet
cuya instancia es devuelta por el método de instancia de HashMap
keySet()
. Esta clase interna contiene el siguiente método.
public void clear() {
HashMap.this.clear();
}
Entiendo la semántica general de " this
"
- Es una referencia al objeto "actual".
- Se puede usar dentro de constructores o cualquier método de instancia donde actúa como una referencia al objeto que se está construyendo o al objeto cuyos métodos se están invocando.
El estilo anterior de usar " this
" parece interesante,
- Se está utilizando como si fuera una variable estática de una clase.
- Todavía debería estar refiriéndose a un objeto cuyo método se está invocando. En esta lógica, debería ser una instancia de HashMap.
Dados los dos anteriores, debería ser posible tener una referencia estática a cualquier objeto de instancia creado dinámicamente, pero eso no es posible ya que podría haber un número infinito de instancias en tiempo de ejecución y no hay construcciones de lenguaje para especificar esta relación entre una clase y su instancias.
Definitivamente me falta algo, alguien me puede ayudar a entender esto mejor.
Cuando se crea una clase interna no estática, obtiene una referencia a su instancia de clase adjunta. Para hacer referencia a esa instancia, se utiliza una sintaxis especial: la palabra clave se antepone con el nombre de la clase que lo incluye. Cuando se usa sin un prefijo de nombre de clase, this
palabra clave se refiere a la instancia de la clase interna en sí misma.
Básicamente, la llamada se realiza al método clear
de la clase HashMap
. Tenga en cuenta que dado que el método de la clase interna también se llama clear
, la llamada sin HashMap.this
se habría dirigido al clear()
dentro de la clase interna, causando recursión infinita.
Como lo expresó correctamente Roger Lindsjö en un comentario a continuación Técnicamente se conoce que el modismo califica esta construcción. (JLS 15.8.4)