可能重複:
What is a raw type and why shouldn't we use it?迭代<?> VS迭代器中的Java
的問題是包含在說明相當多的自我:是什麼樣的區別
Iterator<?>
和
Iterator
java中的對象?它們都在Object類型上迭代了嗎?
可能重複:
What is a raw type and why shouldn't we use it?迭代<?> VS迭代器中的Java
的問題是包含在說明相當多的自我:是什麼樣的區別
Iterator<?>
和
Iterator
java中的對象?它們都在Object類型上迭代了嗎?
沒有。 Iterator<?>
遍歷?
s(某些類型源自Object
),而Iterator
僅提供Object
s。這是Java中的泛型支持。
什麼是?
類型?那麼,這是一個很好的問題。
回到Java 5之前的糟糕日子,您有無類型的集合和無類型的迭代器。因此,您的收藏中會有Object
s,您必須手動投射它們。例如:
List foo = new ArrayList();
foo.add("Foo!");
for(Iterator i = foo.iterator(); i.hasNext();)
{
Object element = i.next();
System.out.println((String)element);
}
注意鑄造?那是因爲我們只是將Object
填入列表中,我們必須自己做所有的家務管理。與List
相比,效果並不差,但想象一張包含地圖的地圖,其中包含一張包含地圖的地圖......嗯,您明白了。你正在投入地獄,你很快就不知道你是否正在查看從String
到Integer
的地圖,或者是你的其他地圖從Integer
到String
。
在Java 5中,你可以使用仿製藥,所以現在你可以說:
List<String> foo = new ArrayList();
foo.add("Foo!");
for(Iterator<String> i = foo.iterator(); i.hasNext();)
{
String element = i.next();
System.out.println(element);
}
注,中投是不必要的?當我們使用List<String>
時,我們可以使用Iterator<String>
並且具有某種類型的安全性。
當你開始做的事情更復雜的數據結構,就像這實在是有益的:
Map<String, Map<String, Map<String, SomeRandomObject>>> complexMap;
第一個意思是它迭代的對象,它們可以是任何東西。實際上第二個是相同的,但理論上你沒有泛型,所以你沒有使用編譯器提供的優勢。
沒有區別,不同之處在於,編譯器會更快樂與第一位的,因爲那知道你不在乎什麼迭代器返回;-)
在編譯器可能會給第二種情況警告,因爲該類型是未指定的,無法檢查。到處都有很多警告意味着你沒有注意到那些真正重要的警告。
@ruakh:對不起試圖找到類似的問題,不知道如何字呢。感謝您的鏈接。 – Bober02 2012-03-05 20:00:05
不需要道歉。我能找到這個問題的唯一原因是我已經知道答案是「原始類型」。我將其標記爲重複,以指出您在那裏的精彩答案,而不是批評您的問題是否重複該問題。 – ruakh 2012-03-05 20:02:55