在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[]>
。
答案 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[]>
。
我怀疑你是在一个声明为Vector
或Vector<?>
或其他东西的变量上调用它。或者您可能正在将迭代器分配给Iterator
或Iterator<?>
变量而不是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 []以便使用它们。