【发布时间】: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.util或java.lang.reflect中使用某些东西,你必须显式地导入它。