对于类型为接口的引用变量,分配给它的对象必须实现接口。 这对于List Iterator接口是如何实现的,该接口被分配了一个没有实现它的类的对象。(我无法在层次结构中找到关系)
List<String> list = new ArrayList<String>();
ListIterator<Type> it = list.listIterator(list.size());---1
我读到Iterator是ListIterator的超类,但我找不到ListIterator和ArrayList或List之间的关系。
使用List
接口,我知道它有一个方法listIterator(),它有助于为集合分配迭代器。但是哪个类实际上实现了ListIterator,以便在层次结构中为它分配它。
我试图理解陈述1以及如何分配这个值。
答案 0 :(得分:0)
根据immibis评论的建议,让我们来看看listIterator(int)的实现:
public ListIterator<E> listIterator(int index) {
if (index < 0 || index > size)
throw new IndexOutOfBoundsException("Index: "+index);
return new ListItr(index);
}
我们看到,返回类型是ListIterator<E>
,这正是我们所期望的(因为ArrayList类定义是public class ArrayList<E>
)。例如,如果我们有ArrayList<String>
,方法返回类型将为ListIterator<String>
。
但这是什么?它不是我们创建的ListIterator
,而是ListItr
的实例。让我们来看看它的定义:
private class ListItr extends Itr implements ListIterator<E>
它是ArrayList的内部类,它定义了一些实现ListIterator接口的类。
所以,看看你的代码,我们可以添加一些括号,以便更清楚地发生了什么:
ListIterator<Type> it = (list.listIterator(list.size()));
我们做的是获取列表,然后在该列表上调用listIterator()
,将list.size()
作为参数传递。然后该方法返回一个ListIterator,它被分配给it
。
修改强>
我不确定我是否理解你的问题。在这种情况下,不是必须实现ListIterator接口的ArrayList,而是由您在ArrayList的实例上调用的listIterator(int)
方法返回的对象,因此它只是由必须实现接口的方法调用返回的对象。