JOKER1072752180 2017-08-15 02:10 采纳率: 0%
浏览 1420

java容器中ArrayList通过内部类实现Iterator接口时,内部类Itr的写法不太懂?

图片说明
通过jdk的源码可知在java容器中都是通过内部类的方式来实现Iterator接口或者ListIterator接口,上图中通过内部类的方式实现Iterator接口的形式,好像不太符合泛型接口的实现方式,求大神告知详情?
个人的几个想法:
1.不声明为Itr,ArrayList类也是实现Iterator接口,需要重写iterator(),在重写的方法中是new Itr()对象,如果声明为泛型,此时就需要对应的实际参数(不能传递new Itr()进去)。
2.如果Itr是非泛型类,那么内部的方法就应该声明为泛型方法,但是内部也没有声明?
请问有了解的大神,给一个合理的解释~~~~

  • 写回答

1条回答

  • Vane11 2017-08-15 03:40
    关注

    题主可以再描述的准确点,有些语句不容易理解
    例如没懂“在重写的方法中是new Itr()对象”是什么意思。

    先讲能理解的问题,我理解其实这个问题就是泛型。题主在纠结 源码里的这段
    public Iterator iterator() {
    return new Itr();
    }
    为什么new Itr(),没有传泛型?因为实现的接口已经指定了泛型了,这个泛型就是new ArrayList() 里的E,源码很明确
    还有题主说的“不太符合泛型接口的实现方式”,我不是很能理解。接口和泛型互不干扰,也没有什么特殊的实现方式
    再讲接口实现方式,先明确一点,功能实现有很多种方式,方式的不同取决于设计的不同(不讨论好和坏),每个功能的实现都可以多样化。
    接口是功能的定义,每个接口都是一类功能划分。List和Iterator定义和功能都是不同的,实际也是定义了两个不同的接口,从这个角度来讲,List的实现类是不需要实现Iterator接口的,这是一个耦合的概念。
    有说的不当的地方,望大家指正

    评论

报告相同问题?

悬赏问题

  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛