2012-03-05 12 views
2

可能性の重複に:
What is a raw type and why shouldn't we use it?イテレータ<?>は、java

質問が説明に含まれ、かなり自己です:

Iterator<?> 

の違いは何ですかおよび

Iterator 

javaのオブジェクトはありますか?どちらもオブジェクト型を反復処理しますか?

+0

@ruakh:申し訳ありませんが、同様の質問を見つけようとどのようにそれ言葉に気づいていなかったました。リンクありがとう。 – Bober02

+3

謝罪する必要はありません。私がその質問を見つけることができる唯一の理由は、答えが「生の種類」であることを既に知っていたことです。私はそれを重複してマークして、そこにある素敵な答えをあなたに指摘しました。 – ruakh

答えて

4

いいえ。 Iterator<?>?s(Objectに由来するある種)を反復しますが、IteratorObjectsしか提供しません。これはJavaでのジェネリックスのサポートです。

?タイプとは何ですか?まあ、それはすばらしい質問です。

Java 5より前の悪い昔は、タイプのないコレクションと型なしイテレータがありました。だからあなたのコレクションにObjectがあり、それらを手動でキャストする必要があります。例:

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に戻る地図を見ているかどうかはすぐに分かりません。

List<String> foo = new ArrayList(); 
foo.add("Foo!"); 

for(Iterator<String> i = foo.iterator(); i.hasNext();) 
{ 
    String element = i.next(); 

    System.out.println(element); 
} 

注意キャストが不要だったこと:Java 5の中

、あなたは今、あなたが言うことができる、ジェネリックを使用することができますか? List<String>を使用する場合、Iterator<String>を使用して、型の安全性を確保することができます。

あなたのような、より複雑なデータ構造で物事をやって起動したときにこれは本当に有益である:

Map<String, Map<String, Map<String, SomeRandomObject>>> complexMap; 
1

最初のことは、オブジェクトが反復することを意味し、何でもかまいません。 2つ目は実際には同じですが、理論的にはそこにGenericsはないので、コンパイラが提供する利点を使用していません。

それは あなたはイテレータは、コンパイラが与える可能性が後者の場合;-)

を返す気にしないを知っているので、コンパイラは、最初の1と幸せになることを除いて

3

差なし、型が指定されていないため、チェックできません。どこにいても多くの警告は、あなたが実際に重要なものに気付かないことを意味します。

関連する問題