我目前正在内部类部分阅读Oracle的Java教程.
请参阅此链接
在教程中有一些我不理解的代码.
有人可以向我解释一下这个代码在下面的代码是如何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