我目前正在内部类部分中阅读Oracle的Java教程。
请引用this link
本教程中有一些我不理解的代码。
有人可以告诉我下面DataStructure
类中的这段代码如何工作吗?
DataStructureIterator iterator = this.new EvenIterator();
外部类是否应位于
DataStructureIterator iterator
和this.new EvenIterator()
之前,如下所示:DataStructure.DataStructureIterator iterator = DataStructure.this.new EvenIterator();
我搜索了一段时间,但没有找到任何答案。
最佳答案
声明DataStructure.DataStructureIterator iterator = DataStructure.this.new EvenIterator();
是有效的,但是在该方法的上下文中是多余的。
考虑这种情况,内部类之间存在冲突
public void printEven() {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
//Makes EvenIterator point to DataStructure's implementation
DataStructureIterator itr = DataStructure.this.new EvenIterator();
}
class EvenIterator implements DataStructureIterator {
@Override
public boolean hasNext() {
return false;
}
@Override
public Integer next() {
return null;
}
@Override
public void remove() {
}
}
});
}
如您所见,匿名类
Runnable
具有名为EvenIterator
的内部类(与外部类的内部类同名)。所以只写DataStructureIterator itr = this.new EvenIterator(); //OR DataStructureIterator itr = new EvenIterator();
将引用
Runnable
的EvenIterator
。要指向DataStructure
的EvenIterator
,您可能需要编写DataStructureIterator itr = DataStructure.this.new EvenIterator();
这就是说,我希望在
EvenIterator
的当前实例上创建DataStructure
,而不是在Runnable
的当前实例上创建ojit_code