在Java中声明一个迭代器

我对Java中的迭代器非常困惑。

该教程正在阅读中说:

在Java编程语言中,接口是类似于类的引用类型,它只能包含常量,方法签名和嵌套类型。 没有方法体。 接口无法实例化 – 它们只能由类实现或由其他接口扩展。 扩展将在本课程后面讨论。

然后我看到了另一个教程:

Iterator flavoursIter = aFlavours.iterator(); 

我知道aFlavours已经inheritance了迭代器函数,它返回迭代器接口。 我只是不明白这一行实际发生了什么。 我以为你无法实例化?

也许我没有意义,但请告诉我,我正在离开赛道。

通过说它无法实例化,它们的意思是你不能做Iterator i = new Iterator(); 。 由于Iterator是一个接口,它本身没有实现。 当你这样做

 Iterator flavoursIter = aFlavours.iterator(); 

你正在做的是在aFlavours对象上调用一个名为“iterator”的方法,它返回一个实现Iterator接口的类的实例(你真的不知道它究竟是什么类,你也不应该关心,所有你’保证它支持Iterator接口中定义的所有方法)。

作为其他答案的补充:

许多类将Iterator等接口实现为私有内部类,然后在请求实例时返回该隐藏类的实例。 如果需要示例,可以阅读Collections框架的源代码。

以这种方式执行操作的主要优点是隐藏了实现细节。 例如, List的用户在调用someList.iterator ()someList.iterator ()知道返回什么具体类,也不需要知道Collections框架中有多少不同的Iteraor实现。 这允许该框架的开发者根据他们的需求(可靠性,效率等)根据需要创建尽可能多的实现,并且作为框架的用户,您不必学习数百个类。

您无法创建Iterator对象,但可以创建实现Iterator接口的对象。 使用Iterator flavoursIter意味着您不关心哪个实现。

你是对的。 Iterator是一个interface ,因此无法直接实例化。 但是,您可以创建和实例化Iterator类的实现。

本质上,具有iterator()方法的类已经编写了自己的Iterator接口实现。 iterator()实例化并返回Iterator的实现。

踢,当我们调用方法iterator()时,它将返回Iterator的实例。例如

 public Iterator iterator() { return new ArryListIterator implments Iterator { public T next() { // code for next() } public boolean hasNext() {//code for hashNext()} //others codes } 

}

所以。你知道我们打电话的时候发生了什么。