通过jdk的源码可知在java容器中都是通过内部类的方式来实现Iterator接口或者ListIterator接口,上图中通过内部类的方式实现Iterator接口的形式,好像不太符合泛型接口的实现方式,求大神告知详情?
个人的几个想法:
1.不声明为Itr,ArrayList类也是实现Iterator接口,需要重写iterator(),在重写的方法中是new Itr()对象,如果声明为泛型,此时就需要对应的实际参数(不能传递new Itr()进去)。
2.如果Itr是非泛型类,那么内部的方法就应该声明为泛型方法,但是内部也没有声明?
请问有了解的大神,给一个合理的解释~~~~
java容器中ArrayList通过内部类实现Iterator接口时,内部类Itr的写法不太懂?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- Vane11 2017-08-15 03:40关注
题主可以再描述的准确点,有些语句不容易理解
例如没懂“在重写的方法中是new Itr()对象”是什么意思。先讲能理解的问题,我理解其实这个问题就是泛型。题主在纠结 源码里的这段
public Iterator iterator() {
return new Itr();
}
为什么new Itr(),没有传泛型?因为实现的接口已经指定了泛型了,这个泛型就是new ArrayList() 里的E,源码很明确
还有题主说的“不太符合泛型接口的实现方式”,我不是很能理解。接口和泛型互不干扰,也没有什么特殊的实现方式
再讲接口实现方式,先明确一点,功能实现有很多种方式,方式的不同取决于设计的不同(不讨论好和坏),每个功能的实现都可以多样化。
接口是功能的定义,每个接口都是一类功能划分。List和Iterator定义和功能都是不同的,实际也是定义了两个不同的接口,从这个角度来讲,List的实现类是不需要实现Iterator接口的,这是一个耦合的概念。
有说的不当的地方,望大家指正解决 无用评论 打赏 举报