【问题标题】:Why can't an interface extends Iterator?为什么接口不能扩展迭代器?
【发布时间】:2018-06-18 23:54:22
【问题描述】:

我正在尝试为 ArrayList 实现迭代器。我有一个 ArrayList 的接口,我还希望它实现 Iterator,所以我可以在实际的 ArrayList 类中提供实现。界面是这样的:

public interface AListInterface<T> extends Iterator<T> {

       add();
       remove();
       ......

}

但我收到错误消息,说我必须导入 java.util.Iterator。所以我很困惑,我以为一旦导入了一个类,我就可以像 Scanner 一样使用所有已经实现的方法。那么导入Iterator接口的意义何在,同时还需要提供实现呢?

另外,如果我将 AListInterface 的标题更改为:

public interface AListInterface<T> extends Iterable<T> { }

它编译得很好,为什么可以扩展 Iterable 而不是 Iterator?

【问题讨论】:

  • 为了让 Java 编译器知道你在代码中引用了哪个 Iterable,你需要在 Java 源代码中导入。编译器会引用它。在Java源文件顶部声明包后说import java.util.Iterator;
  • Java 默认只导入java.lang.*。如果你想在java.utiljava.lang.reflect 中使用某些东西,你必须显式地导入它。

标签: java iterator


【解决方案1】:

为什么不能有接口extends Iterator

可以。参见例如java.util.ListIterator

但我收到错误消息,说我必须导入 java.util.Iterator

所以导入它。

所以我很困惑

我同意。

我想一旦导入一个类,我就可以像 Scanner 一样使用所有已经实现的方法。

不,这主要意味着您可以使用类的名称而无需限定。

那么导入Iterator接口有什么意义

所以你可以使用Iterator这个名字而无需限定。

同时还需要提供实现?

你没有。您正在定义一个接口。不需要方法实现。并且提供方法实现与导入无关。

为什么可以扩展 Iterable 而不是 Iterator

因为你肯定已经导入了。

【讨论】:

    猜你喜欢
    • 2011-02-05
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2011-08-07
    • 2012-01-23
    • 1970-01-01
    • 2014-12-01
    相关资源
    最近更新 更多