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

2022-09-03 01:28:18

在类中有一个内部类,其实例由 的实例方法返回。此内部类包含以下方法。HashMapKeySetHashMapkeySet()

public void clear() {
    HashMap.this.clear();
}

我理解”this"

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

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

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

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

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


答案 1

创建非静态内部类时,它将获取对其封闭类实例的引用。为了引用该实例,使用了一种特殊的语法:关键字以封闭类的名称为前缀。当使用时不带类名前缀时,关键字是指内部类本身的实例。thisthis

实质上,调用类的方法。请注意,由于内部类的方法也被调用,因此不带的调用将被定向到内部类内部,从而导致无限递归。clearHashMapclearHashMap.thisclear()

正如Roger Lindsjö在下面的评论中正确指出的那样,从技术上讲,这个成语被称为限定的这种结构。 (JLS 15.8.4)


答案 2

HashMap.this.clear();调用 的当前实例,您提到它从 InnerClass 调用,所以这就是它引用 Outter 类的方式。HashMap