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

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • vane11
    Vane11 2017-08-15 03:40

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

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

    点赞 评论

相关推荐