java中的这个关键字

use*_*344 12 java this keyword

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

请参阅此链接

在教程中有一些我不理解的代码.

有人可以向我解释一下这个代码在下面的代码是如何DataStructure工作的吗?

DataStructureIterator iterator = this.new EvenIterator();
Run Code Online (Sandbox Code Playgroud)

外部阶级不应该在以下之前DataStructureIterator iterator,this.new EvenIterator()如下所示:

DataStructure.DataStructureIterator iterator = DataStructure.this.new EvenIterator();
Run Code Online (Sandbox Code Playgroud)

我已经搜索了一段时间,但我没有找到任何答案.

san*_*hat 6

声明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() {
            }

        }
    });
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,匿名类Runnable具有名为内部类的内部类EvenIterator(其名称与外部类的内部类相同).所以写作只是

DataStructureIterator itr = this.new EvenIterator(); //OR DataStructureIterator itr = new EvenIterator();
Run Code Online (Sandbox Code Playgroud)

会参考RunnableEvenIterator.要指出DataStructureEvenIterator,你可能会想要写

DataStructureIterator itr = DataStructure.this.new EvenIterator();
Run Code Online (Sandbox Code Playgroud)

哪个说,我想EvenIterator当前实例上创建DataStructure,而不是当前实例Runnable