我在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
有什么好处?
答案 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"而不只是"这个"因为"这个"将访问当前类而不是父类。