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