这个关键字是java中的
我正在阅读Oracle内部类部分的java教程 请参阅 在教程中有一些代码我不理解 有人能给我解释一下这个关键字是java中的,java,this,keyword,Java,This,Keyword,我正在阅读Oracle内部类部分的java教程 请参阅 在教程中有一些代码我不理解 有人能给我解释一下DataStructure类中下面的代码是如何工作的吗 DataStructureIterator iterator = this.new EvenIterator(); 外部类是否不应位于数据结构迭代器迭代器和this.new EvenIterator()之前,如下所示: DataStructure.DataStructureIterator iterator = DataStructure
DataStructure
类中下面的代码是如何工作的吗
DataStructureIterator iterator = this.new EvenIterator();
外部类是否不应位于数据结构迭代器迭代器
和this.new EvenIterator()
之前,如下所示:
DataStructure.DataStructureIterator iterator = DataStructure.this.new EvenIterator();
我已经搜索了一段时间,但没有找到任何答案。声明
DataStructure.DataStructure迭代器iterator=DataStructure.this.new eventirator()
有效,但在该方法的上下文中是多余的
考虑这个场景,其中存在冲突的内部类
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
。要指向数据结构
的甚至迭代器
,您可能需要编写
DataStructureIterator itr = DataStructure.this.new EvenIterator();
也就是说,我希望在DataStructure
的当前实例上创建EvenIterator
,而不是在Runnable的当前实例上创建
public class DataStructure {
/** omitted */
public void printEven() {
//#1
DataStructureIterator iterator = this.new EvenIterator();
/** Omitted */
}
//#2
private class EvenIterator implements DataStructureIterator {
/** Omitted */
}
}
这就是赤裸裸的问题
让我们看看我们有什么:
一个类数据结构
,它有一个非静态方法print偶数
。此类中的this
关键字将始终表示此类的当前实例/对象:DataStructure
一个内部类,是私有的。这意味着该类在外部不可见。它不是静态的,这意味着您需要外部类的实例才能实例化这个类成员(也称为内部类)
因此,我们想要创建一个eventirator
的实例,我们需要一个。外部类b的实例。调用内部类的构造函数
DataStructureIterator iterator = this.new EvenIterator();
| `---- Call to constructor
`-------------- instance of outer class
执行DataStructure。这在DataStructure
中是冗余的。因为我们知道我们在数据结构
的范围内,所以只要这个
就行了但是,如果您在内部类甚至迭代器中,并且希望明确地访问外部类的实例,则必须执行数据结构,因为在内部类中,这个
将意味着甚至迭代器的实例
在您的特定示例中,关键字这个
实际上是在外部类中编写的,而不是在内部类中编写的。因此,它在任何方面都不含糊-它只能引用数据结构
实例。因此,没有必要(但合法)将其限定为数据结构。如果在内部类中使用了this
,并且希望它引用DataStructure
实例,则必须编写DataStructure.this
根据-
这是发生此关键字的类C
“this关键字”指对象类的范围,因此:
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”关键字链接类构造函数 @Ɍ.Ɉ:我还不确定我是否买了……是的,它用的是这个,但它用的是一种非传统的方式。我甚至没有意识到你可以用这个。执行该行的代码在哪里这个
是创建内部类实例所需的封闭实例。哇,你花了多长时间搜索整个Internet?你必须先把它下载到软盘上吗?@Ɍ。Ɉ-这不可能是重复的。