java iterator - 为什么泛型类型是可选的

时间:2014-02-16 08:49:05

标签: java generics

我有以下方法:

public Iterator<Item> iterator() {
    return new ListIterator();
}

,它用于以下代码:

Deque<Integer> deque = new Deque<Integer>();
// ...
Iterator<Integer> iter1 = deque.iterator();
Iterator iter2 = deque.iterator();

问题是 - 为什么java编译器接受这两行(iter1&amp; iter2)?特别是iter2对我来说很奇怪。当我创建我以前的对象(deque)时,我需要在两侧指定类型。

无论如何,如果我把

Deque deque2 = new Deque();

那么编译器也可以。混乱...

1 个答案:

答案 0 :(得分:3)

  

为什么java编译器接受这两行

这是为了向后兼容。泛型仅包含在Java 1.5中。因此,如果不允许使用原始类型(这就是它们被称为),那么之前的所有代码都将无法编译。但是,即使您被允许,you shouldn't use them in newer code。无论您使用原始类型,编译器都会为您提供未经检查的警告