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

时间:2013-06-08 12:38:02

标签: java collections

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

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

我理解“this

的一般语义
  1. 它是对“当前”对象的引用。
  2. 可以在构造函数或任何实例方法中使用,它可以作为对正在构造的对象或其方法被调用的对象的引用。
  3. 上述使用“this”的风格似乎很有趣,

    1. 它被用作类的静态变量。
    2. 它应该仍然是指一个正在调用其方法的对象。在逻辑上它应该是一个HashMap实例。
    3. 鉴于以上两点,应该可以对任何动态创建的实例对象进行静态引用,但这是不可能的,因为在运行时可能存在无限数量的实例,并且没有任何语言结构来指定类及其实例。

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

2 个答案:

答案 0 :(得分:18)

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

基本上,调用clear类的HashMap方法。请注意,由于内部类的方法也称为clear,因此没有HashMap.this的调用将被定向到内部类中的clear(),从而导致无限递归。

RogerLindsjö在下面的评论中正确地说明了技术上这个成语被称为限定了这个构造。 (JLS 15.8.4)

答案 1 :(得分:3)

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