2010-06-10 69 views
2

形成優先:我該如何聲明迭代器?

String my = "Which form shall I use?"; 
Iterator iter = my.iterator(); 

Iterator<String> iter = my.iterator(); 

我個人preferr前者,但是從我大學裏的材料,他們使用後者。

+1

String沒有方法迭代器()。 – dacwe 2010-06-10 10:26:55

+2

你爲什麼喜歡前者?後者更安全。順便說一句,一個字符串是不可迭代的。 – Jesper 2010-06-10 10:27:26

+1

毫無意義。這個問題是基於一個錯誤的前提。 – EJP 2010-06-10 11:05:19

回答

11

在後一種形式中,該迭代是強類型這是優選的

5

後者。泛型參數避免顯式強制轉換,並幫助您保持類型安全。但是,字符串不是可迭代的。

7

當API提供它應使用泛型。也就是說,後一種選擇是可取的。

Iterator iter = someList.iterator(); 
String s = (String) iter.next(); // prone to class cast exceptions. 
            // What if someone for instance accidentally 
            // put a CharSequence in the list? 

VS

Iterator<String> iter = someList.iterator(); 
String s = iter.next();   // guaranteed typesafe at compile-time. 

(String不落實Iterable<String>不過,但我敢肯定,你的意思是像List<String> my = Arrays.asList("Which form shall I use?")東西

2

字符串不是可迭代?如果你想遍歷字符你需要這樣做:

String my = "Which form shall I use?"; 
for(char c : my.toCharArray()) 
    System.out.println(c); 
+0

true,char數組是可迭代的,但不是字符串本身(一個字符串有一個char數組,但它不是一個) – 2010-06-10 13:25:52