我有以下方法:
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();
那么编译器也可以。混乱...
答案 0 :(得分:3)
为什么java编译器接受这两行
这是为了向后兼容。泛型仅包含在Java 1.5中。因此,如果不允许使用原始类型(这就是它们被称为),那么之前的所有代码都将无法编译。但是,即使您被允许,you shouldn't use them in newer code。无论您使用原始类型,编译器都会为您提供未经检查的警告。