Как мне объявить Итератор? - PullRequest
2 голосов
/ 10 июня 2010

Какая форма предпочтительнее:

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

или

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

Я лично предпочитаю первое, но в моих материалах из универа они используют последнее.

Ответы [ 4 ]

11 голосов
/ 10 июня 2010

В последнем варианте Итератор строго типизирован, что предпочтительнее

7 голосов
/ 10 июня 2010

Вы должны использовать дженерики, когда 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?

против

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

(Строка, однако, не реализует Iterable<String>, но я уверен, что вы имели в виду что-то вроде List<String> my = Arrays.asList("Which form shall I use?")

5 голосов
/ 10 июня 2010

Последний.Универсальный аргумент избегает явных приведений и помогает поддерживать безопасность типов.Тем не менее, строка не является итерируемой.

2 голосов
/ 10 июня 2010

Строка не повторяется? Если вы хотите перебрать символы, вам нужно сделать что-то вроде этого:

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