在HashMap
类中有一个内部类KeySet
,它的实例由HashMap
的实例方法keySet()返回
。该内部类包含以下方法。
public void clear() {
HashMap.this.clear();
}
我理解“this
”的一般语义
- 它是对“当前”对象的引用。
- 可以在构造函数或任何实例方法中使用,它充当对正在构造的对象或正在调用其方法的对象的引用。
上面使用“this
”的风格看起来很有趣,
- 它被用作类的静态变量。
- 它仍应引用一个对象,其方法正在被调用。从逻辑上讲,它应该是一个 HashMap 实例。
鉴于以上两个,应该可以对任何动态创建的实例对象进行静态引用,但这是不可能的,因为在运行时可能有无限数量的实例,并且没有任何语言结构来指定一个实例之间的这种关系类及其实例。
我肯定遗漏了一些东西,有人可以帮助我更好地理解这一点。
最佳答案
创建非静态内部类时,它会获得对其封闭类实例的引用。为了引用该实例,使用了一种特殊的语法:关键字 this
以封闭类的名称为前缀。在没有类名前缀的情况下使用时,this
关键字指的是内部类本身的实例。
本质上,调用是对 HashMap
类的 clear
方法进行的。请注意,由于内部类的方法也称为 clear
,因此没有 HashMap.this
的调用将被定向到 clear()
在内部类内部,导致无限递归。
正如 Roger Lindsjö 在下面的评论中正确指出的那样 从技术上讲,这个成语被称为限定此 结构。 (JLS 15.8.4)
关于java - HashMap.this.clear() 是什么意思,这个是怎么工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16999611/