(Java) Итерация по векторуПочему .next () - это объект, а не строка []? - PullRequest
1 голос
/ 17 февраля 2012

В Java, когда вы выполняете итерацию по Vector<String[]>, почему .next() Object необходимо преобразовать в String[], чтобы использовать каждый элемент как String[]?

EDIT:

Вот мой код:

    Iterator itr = getIdAndName().iterator();
    while( itr.hasNext() ) {
        String[] stringArray = (String[])itr.next();
        String id = stringArray[0];
        String name = stringArray[1];
        System.out.println(id + ": " + name);
    }

getIdAndName() возвращает Vector<String[]>.

Ответы [ 4 ]

13 голосов
/ 17 февраля 2012

Это не так. Единственное, о чем я могу думать, это то, что вы не печатаете свой итератор, т.е. вы делаете это:

Vector<String[]> vector;
Iterator it = vector.iterator();
Object obj = it.next();

когда вы должны делать:

Vector<String[]> vector;
Iterator<String[]> it = vector.iterator();
String[] next = it.next();

Ну, в большинстве случаев вам не нужен итератор напрямую, поэтому вы можете просто использовать:

Vector<String[]> vector;
for (String[] element : vector) {
    //...
}
3 голосов
/ 17 февраля 2012

Метод iterator() возвращает Iterator<String[]> при вызове переменной, объявленный тип которой Vector<String[]>.

Я подозреваю, что вы вызываете его для переменной, которая объявлена ​​как Vector или Vector<?> или как-то еще. Или, может быть, вы назначаете итератор переменной Iterator или Iterator<?> вместо Iterator<String[]>. Очевидно, это всего лишь предположение, потому что вы не показали нам исходный код.

(Обратите внимание, что объявленный тип переменной определяет, требуется ли приведение ... не фактический тип экземпляра.)

1 голос
/ 17 февраля 2012

Когда вы получаете итератор из вашего вектора, пример vector.iterator(); ваш итератор должен был параметризоваться. Таким образом, итератор будет знать, что сохраненный объект имеет тип String []. Если вы не укажете итератору о типе, который он хранит, ему придется обратиться к объекту.

Если вы правильно параметризовали тип, например Iterator<String[]> iter = vector.iterator();, и тогда итерация по iter не будет приведена к явному приведению.

Пожалуйста, обратитесь сюда о универсальном .

0 голосов
/ 17 февраля 2012

Когда вы перебираете вектор, вы используете реализацию интерфейса итератора. По определению, интерфейс Iterator возвращает объект при вызове его метода next (). Вы можете увидеть это определение здесь -

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Iterator.html

Так что не имеет значения, что вы перебираете, итератор всегда будет возвращать объект, когда вы вызываете его метод next ().

И, кстати, .next () НЕ ДОЛЖЕН быть приведен к строке []. Это как раз тот случай, когда в вашем конкретном случае Vector содержит String [] в качестве своих элементов, и поэтому они приводятся к String [] для их использования.

...