java中的这个关键字

 mobiledu2502875545 发布于 2023-01-19 14:48

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

请参阅此链接

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

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

DataStructureIterator iterator = this.new EvenIterator();

外部阶级不应该在以下之前DataStructureIterator iterator,this.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() {
                }
    
            }
        });
    }
    

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

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

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

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

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

    2023-01-19 14:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有