当前位置: 首页 > 知识库问答 >
问题:

当listIterator用作引用类型时,分配给它的对象必须实现它吗?

杜志
2023-03-14

对于类型为接口的引用变量,分配给它的对象必须实现接口。对于列表迭代器接口来说,这是怎么回事?它被分配了一个对象,而这个对象属于一个没有实现它的类。(我在层次结构中找不到关系)

List<String> list = new ArrayList<String>();

ListIterator<Type> it = list.listIterator(list.size());---1

我读到关于Iterator是ListIterator的超类,但我找不到ListIterator和ArrayList或List之间的关系。

使用List接口,我知道它有一个方法listIterator(),它有助于为集合分配迭代器。但是哪个类实际上实现了ListIterator,以便在层次结构中分配给它。

我试图理解语句1,以及它是如何赋值的。

共有1个答案

刘子实
2023-03-14

根据immibis comment的建议,让我们看看listIterator(int)的实现:

public ListIterator<E> listIterator(int index) {
    if (index < 0 || index > size)
        throw new IndexOutOfBoundsException("Index: "+index);
    return new ListItr(index);
}

我们看到,返回类型是ListIterator

但这是什么?它不是我们创建的一个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)方法返回的对象,因此只有该方法调用返回的对象必须实现该接口。

 类似资料:
  • 问题内容: 尽管Java中的所有类都是Object类的子类,但是与其他对象类型不同,但是如果没有强制类型转换,则不能将Object类型的引用变量分配给任何其他引用类型。 例如: 问题答案: 您想知道为什么我们使用显式类型转换。这就是关于继承的一切- 让我来清除此-让我们有两个类 A类 和 B类 。和 B类 是子类的 类A 。这意味着 Class B 具有 Class A的 所有功能,这意味着 Cl

  • 我是Android和Java的初学者。我寻找这个错误的答案,但stackOverflow中的任何东西都不适合我的情况。我在读一本书,书中说我们需要使用一个onListItemClick()方法,该方法来自我们创建的扩展ListFragment的类(CrimeListFragment)(使用该方法和类是必需的)。 然而,我不断发现以下错误: 错误说 “CrimeListFragment类型的onLi

  • 问题内容: 我收到此错误为- 无法访问类型为GeoLocation的封闭实例。 必须使用类型为GeoLocation的封闭实例来限定分配(例如xxA(),其中x是GeoLocation的实例)。 新的ThreadTask(i) 上将出现此错误。我不知道为什么会这样。任何建议将不胜感激。 问题答案: 嗨,我找到了一个解决方案;-) 发生此错误的原因是,您尝试创建内部类的实例 而不创建主类的实例。 要

  • 我是爪哇的新手。我不明白为什么会发生这些错误。尝试创建一个数组列表,以便它保存每个对象。我得到的错误是 表达式的类型必须是数组类型,但它解析为数组列表上的行“newbug1[i].setpecies();” 提前致谢

  • 问题内容: 在Objective-C中,您可以将类型定义为给定类并实现协议: 这将表明返回的值是实现给定协议的值。有没有办法在Swift中执行类似的操作? 问题答案: 您可以这样做: 这定义了一个函数,该函数返回类型为“SomeType”和协议“SomeProtocol”的对象,并返回符合这些条件的对象。

  • 问题内容: 在Python中,对象实例是否可以查看分配给它的变量名?以以下为例: MyObject是否有可能在任何时候看到已将其分配给变量名x?就像它的__init__方法一样? 问题答案: 否。对象和名称位于单独的维度中。一个对象在其生命周期内可以有多个名称,因此无法确定哪个可能是您想要的。即使在这里: 两个名字代表相同的对象(当运行时,在全球范围内)。