这个关键字在java中

2022-09-04 22:08:12

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

请参考此链接

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

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

DataStructureIterator iterator = this.new EvenIterator();

如果外部类不在前面,如下所示:DataStructureIterator iteratorthis.new EvenIterator()

DataStructure.DataStructureIterator iterator = DataStructure.this.new EvenIterator();

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


答案 1

该声明是有效的,但在该方法的上下文中是多余的。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() {
            }

        }
    });
}

如您所见,匿名类具有名为的内部类(与 Outer 类的内部类同名)。所以写作只是RunnableEvenIterator

DataStructureIterator itr = this.new EvenIterator(); //OR DataStructureIterator itr = new EvenIterator();

将引用 的 。要指向 的 ,您可能需要编写RunnableEvenIteratorDataStructureEvenIterator

DataStructureIterator itr = DataStructure.this.new EvenIterator();

这说明,我想在 的当前实例上创建,而不是当前实例EvenIteratorDataStructureRunnable


答案 2

“this keyword”指的是一个对象类的作用域,所以:

public class Test {
     public void method1(){
         this. //this in here refer to "Test" class
     }

     public class InnerTest {
        public void method2(){
           this. //this in here refer to "InnerTest" class
        }
     }
}

现在看看这个例子中的“这个关键字”:

public class Test {
     public void method1(){

         InnerTest innerTest = this.new InnerTest(); //within the scope of Test class, there's a inner class call InnerTest. create an instance of it !
         //OR
         TestInterface innerTest2 = this.new InnerTest(); //within the scope of Test class, there's a inner class call InnerTest. create an instance of it !
     }

     public class InnerTest implements TestInterface{
        public void method2(){
           Test.this.method1(); //within the scope of "Test" class call the method method1
        }
     }
}

请注意,您也可以使用此关键字来链接类的构造函数。看看这个例子:

public class Test {

    public Test() {
        this(0);
    }

    public Test(int r) {
        // Do Something Here
    }
}

结论:

“this”关键字的作用类似于指向类范围的指针,使用“this”可以指向特定类并执行任何操作。

您还可以使用“this”关键字来链接类构造函数