2010-06-10 6 views
2

Quelle forme est préférée:Comment déclarer Iterator?

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

ou

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

Je preferr personnellement l'ancien, mais dans mes matériaux de uni ils utilisent ce dernier.

+1

La chaîne n'a pas de méthode itérateur(). – dacwe

+2

Pourquoi préférez-vous le premier? Ce dernier est plus sûr de type. Btw, une chaîne n'est pas itérable. – Jesper

+1

Sans signification. La question est basée sur une fausse prémisse. – EJP

Répondre

11

Dans cette dernière forme, la Iterator est fortement typée qui est préférable

5

Ce dernier. L'argument générique évite les conversions explicites et vous aide à maintenir la sécurité du type. Cependant, String n'est pas Iterable.

7

Vous devez utiliser les médicaments génériques lorsque l'API fournit. Autrement dit, cette dernière alternative est préférable.

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. 

(chaîne n'implémente pas Iterable<String> cependant, mais je suis sûr que vous vouliez dire quelque chose comme List<String> my = Arrays.asList("Which form shall I use?")

2

chaîne est Iterable pas? Si vous voulez itérer sur les personnages vous devez faire quelque chose comme ceci:

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

true, le tableau char est itérable, mais pas la chaîne elle-même (une chaîne a un tableau char, mais ce n'est pas un) –