我目前正在内部类部分中阅读Oracle的Java教程。

请引用this link

本教程中有一些我不理解的代码。

有人可以告诉我下面DataStructure类中的这段代码如何工作吗?

DataStructureIterator iterator = this.new EvenIterator();

外部类是否应位于DataStructureIterator iteratorthis.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();

将引用RunnableEvenIterator。要指向DataStructureEvenIterator,您可能需要编写
DataStructureIterator itr = DataStructure.this.new EvenIterator();

这就是说,我希望在EvenIterator当前实例上创建DataStructure,而不是在Runnable的当前实例上创建ojit_code

09-25 22:12