questions interview example collection colecciones java collections

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 "

  1. Es una referencia al objeto "actual".
  2. 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,

  1. Se está utilizando como si fuera una variable estática de una clase.
  2. 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)