哪个类实际实现了接口ListIterator
?我正在研究Collections API ..似乎在ListIterator
实现类中返回List
的实际方法直接在List
本身中指定。
ListIterator
接口指定用于操作迭代器的实际方法..但是我找不到实现它的实际类。
实际上是什么类 - 实现 - 允许ListIterator
类中的方法工作的接口List
?
我确定必须有一个实现类,因为调用listIterator()
本身肯定无法返回一个接口,必须有一些实例化。
答案 0 :(得分:2)
使用source luke ...使用源。
来自JDK 8(1.8.0_45)中ArrayList
的来源
public ListIterator<E> listIterator() {
return new ListItr(0);
}
// then line 905
/**
* An optimized version of AbstractList.ListItr
*/
private class ListItr extends Itr implements ListIterator<E> {
ListItr(int index) {
super();
cursor = index;
}
// etc
因此ListIterator
返回的ArrayList
是一个实现接口ListIterator
的私有内部类。
答案 1 :(得分:0)
您无法实例化interface
,但您始终可以创建“隐身”private class
,这令人满意interface
,但用户无法直接看到它。例如,LinkedList
将listIterator
定义为:
public ListIterator<E> listIterator(int index) {
checkPositionIndex(index);
return new ListItr(index);
}
private class ListItr implements ListIterator<E> {
private Node<E> lastReturned;
private Node<E> next;
private int nextIndex;
private int expectedModCount = modCount;
ListItr(int index) {
// assert isPositionIndex(index);
next = (index == size) ? null : node(index);
nextIndex = index;
}
// much more
}
这种行为在lambdas中有它的最终形式,你不会有任何诱惑来查看传递的类的来源。
答案 2 :(得分:-1)
ListIterator添加了迭代列表API的功能。 这是一个用法示例:
List<String> l = new ArrayList<String>();
ListIterator<String> it = l.listIterator();
it.next() ...