java - HashMap.this.clear() 是什么意思,这个是怎么工作的

标签 java collections

HashMap类中有一个内部类KeySet,它的实例由HashMap的实例方法keySet()返回。该内部类包含以下方法。

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

我理解“this”的一般语义

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

上面使用“this”的风格看起来很有趣,

  1. 它被用作类的静态变量。
  2. 它仍应引用一个对象,其方法正在被调用。从逻辑上讲,它应该是一个 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/

相关文章:

java - Spring 3 应用程序中 Hibernate @SequenceGenerator 的问题

python - Python 中 OrderedDict 的结果不可靠

java - 两个键是相同的 hashMap 覆盖写“现有的?

java - 使用注释 @SuppressWarnings 忽略 Checkstyle 警告

java - Selenium Safari "Unknown command"

java - 清空 JTabbedPane

java - 如何使应用程序无法关闭?

scala - 有效比较 Scala 集合中两个的所有组合

java - CopyOnWriteArraySet 何时对实现线程安全的 HashSet 有用?

Java - 将静态 arrayList 从一个类复制到另一个类中的 HashMap