2014-02-16 62 views
0

我有以下方法:的Java迭代器 - 爲什麼是通用型可選

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

,並在下面的代碼中使用:

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

的問題是 - 爲什麼Java編譯器接受兩條線(iter1 & iter2)?特別是iter2對我來說很陌生。當我創建我以前的對象(deque)時,我需要指定兩側的類型。

無論如何,如果我把

Deque deque2 = new Deque(); 

那麼編譯器是罰款這一點。混亂...

回答

3

爲什麼Java編譯器接受兩行

這是有向後兼容性。泛型只包含在Java 1.5中。因此,如果不允許使用原始類型(這就是他們所稱的),那麼以前的所有代碼都將無法編譯。但是,即使您被允許,you shouldn't use them in newer code。無論你使用原始類型,編譯器都會給你一個未經檢查的警告

+0

舊的結構(原始類型)會永遠持續向後兼容嗎?還是會被切斷(就像Python 3對Python 2的某些功能所做的那樣)? – ducin

+0

@tkoomzaaskz我不認爲它會在不久的將來被刪除。至少現在,沒有這樣的計劃。 –