Java:此关键字以类名开头

时间:2014-07-25 03:51:49

标签: java arraylist this

我在jdk 8中找到了ArrayList.java中的一个片段:

    @SuppressWarnings("unchecked")
    public E next() {
        checkForComodification();
        int i = cursor;
        if (i >= size)
            throw new NoSuchElementException();
        Object[] elementData = ArrayList.this.elementData;
        if (i >= elementData.length)
            throw new ConcurrentModificationException();
        cursor = i + 1;
        return (E) elementData[lastRet = i];
    }

这一行:Object[] elementData = ArrayList.this.elementData;对我来说很奇怪。

我认为ArrayList.this相当于this。我对吗?如果存在差异,使用ArrayList.this优于this有什么好处?

4 个答案:

答案 0 :(得分:4)

  

如果存在差异,那么使用ArrayList.this的好处是什么?

Inner类具有对外部类的引用。要使用外部类this,可以将外部类的类放在它之前。

注意:在这种情况下,this是迭代器,并且没有名为elementData的字段

答案 1 :(得分:2)

您看到的代码位于类Itr内,该类是ArrayList的内部类。符号

ArrayList.this.elementData

用于引用封闭的ArrayList实例的名为elementData的字段。在这种情况下,仅使用this.elementData就足够了。但是,如果您的内部类Itr声明了名为elementData的成员,则需要使用其他符号来消除ArrayList成员或Itr成员之间的歧义。

答案 2 :(得分:0)

当您的代码在内部类中时,这指向内部类,因此您需要消除歧义。因此ArrayList.this将意味着ArrayList而不是内部类,在这种情况下,我假设它是迭代器。

答案 3 :(得分:0)

该方法位于私有类Itr中,它是ArrayList的内部类。所以基本上如果我们想要访问外部类的实例变量,我们必须做" Class.this"而不只是"这个"因为"这个"将访问当前类而不是父类。