HashMap.this.clear()这意味着什么,这是如何工作的

san*_*uru 17 java collections

HashMap类中有一个内部类,KeySet其实例由HashMap实例方法返回keySet().此内部类包含以下方法.

public void clear() {
    HashMap.this.clear();
}
Run Code Online (Sandbox Code Playgroud)

我理解" this" 的一般语义

  1. 它是对"当前"对象的引用.
  2. 可以在构造函数或任何实例方法中使用,其中它充当对正在构造的对象或其方法被调用的对象的引用.

以上使用" this"的风格似乎很有趣,

  1. 它被用作类的静态变量.
  2. 它应该仍然是指一个正在调用其方法的对象.在逻辑上,它应该是一个HashMap实例.

鉴于以上两个,应该可以对任何动态创建的实例对象进行静态引用,但这是不可能的,因为在运行时可能存在无限数量的实例,并且没有任何语言结构来指定类与其之间的这种关系实例.

我肯定错过了一些东西,有人可以帮助我更好地理解这一点.

das*_*ght 18

创建非静态内部类时,它会获取对其封闭类实例的引用.为了引用该实例,使用了一种特殊语法:该关键字this以封闭类的名称为前缀.在没有类名前缀this的情况下使用时,keyword指的是内部类本身的实例.

本质上,调用类的clear方法HashMap.请注意,由于也调用了内部类的方法clear,因此不会HashMap.this将调用定向到clear()内部类的内部,从而导致无限递归.

正如RogerLindsjö在下面的评论中正确指出的那样,技术上这个成语被称为合格的这个结构.(JLS 15.8.4)

  • 更清楚的是它被称为"合格的"(JLS 15.8.4). (7认同)