Java - 为什么Iterator需要通用?

时间:2016-02-04 13:12:36

标签: java collections

实际List的迭代器在List的类中实现为内部类。因此,我们可以从内部类引用List的泛型类型。那么为什么迭代器是通用的呢?如果我们从实际List调用迭代器,next()方法将使用调用迭代器的List的Generic类型。

3 个答案:

答案 0 :(得分:1)

因为我们覆盖了超类中的方法。如果超类没有提供通用签名,则无法使用自定义对象覆盖它。

答案 1 :(得分:0)

没有给出所有迭代器都是作为内部类实现的。即使它是这样,返回的迭代器的实例仍将从集合类型的类型中获取(在您的情况下为List)

然而, 点与List及其调用者之间的合约相关联。 List / Collection.iterator()应该根据它的类型参数返回一个泛型迭代器[无论你是否使用了一个中间变量来存储迭代器]。

答案 2 :(得分:0)

迭代器接口设计为

public interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove();
}

请注意next方法。如果接口不是通用的,它会有什么返回类型?这将是

Object next();

因此,如果没有参数化,您最终会得到这样的代码:

List<String> list = createSomeList();
String s = (String) list.iterator().next();

注意必要的演员。泛型的全部意义是生成代码而不需要强制转换;这称为类型安全。使用当前的迭代器接口,您可以

List<String> list = createSomeList();
String s = list.iterator().next();