在Java中声明一个迭代器

时间:2011-11-18 15:48:35

标签: java interface iterator

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

教程正在阅读中说:

  

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

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

Iterator<String> flavoursIter = aFlavours.iterator();

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

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

5 个答案:

答案 0 :(得分:7)

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

Iterator flavoursIter = aFlavours.iterator();

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

答案 1 :(得分:1)

作为其他答案的补充:

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

的实现

答案 4 :(得分:0)

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

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

      }

}

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