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 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办