(Java)迭代Vector <string []>,为什么.next()是一个Object,而不是String []?</string []>

时间:2012-02-17 03:35:06

标签: java casting iterator

在Java中,当您对Vector<String[]>进行迭代时,为什么.next()需要将Object转换为String[],以便将每个元素用作String[] 1}}?

编辑:

这是我的代码:

    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 个答案:

答案 0 :(得分:13)

不是。我唯一能想到的是你没有输入你的迭代器,即你这样做:

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) {
    //...
}

答案 1 :(得分:3)

iterator()方法在声明类型为Iterator<String[]>的变量上调用时返回Vector<String[]>

我怀疑你是在一个声明为VectorVector<?>或其他东西的变量上调用它。或者您可能正在将迭代器分配给IteratorIterator<?>变量而不是Iterator<String[]>。显然,这只是猜想,因为你没有向我们展示源代码。

(请注意,变量声明的类型确定是否需要强制转换...而不是实例的实际类型。)

答案 2 :(得分:1)

当您从向量中获取迭代器时,示例vector.iterator();您的迭代器应该已参数化。这样,迭代器将知道它存储的对象是String []类型,如果你没有告诉它存储的类型的迭代器,它将不得不求助于该对象。

正确参数化类型后,例如Iterator<String[]> iter = vector.iterator();,然后不需要显式地转换iter上的迭代。

请参阅此处generic

答案 3 :(得分:-2)

迭代Vector时,您正在使用Iterator接口的实现。通过DEFINITION,Iterator接口在调用next()方法时返回一个Object。你可以在这里看到这个定义 -

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

因此,迭代的内容并不重要,当您调用next()方法时,Iterator将始终返回一个Object。

顺便说一句,.next()不必被转换为String []。在您的特定情况下,Vector包含String []作为其元素,因此它们被转换为String []以便使用它们。