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)
我已经搜索了一段时间,但我没有找到任何答案.
声明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)
会参考Runnable的EvenIterator.要指出DataStructure的EvenIterator,你可能会想要写
DataStructureIterator itr = DataStructure.this.new EvenIterator();
Run Code Online (Sandbox Code Playgroud)
哪个说,我想EvenIterator在当前实例上创建DataStructure,而不是当前实例Runnable
| 归档时间: |
|
| 查看次数: |
1289 次 |
| 最近记录: |