我从产品的API中获取Vector。
Vector<?> dataVector = dataAPI.getReturnVector();
期望向量包含字符串作为值。我能够将矢量的大小打印为2.但由于某种原因,我无法迭代并打印这些值。
我试过
Iterator<?> iter = dataVector.iterator();
while( iter.hasNext()) {
System.out.println(iter.next());
}
我总是得到一个
[java.lang.String; cannot be cast to java.lang.String
我用过
iter.next().getClass().getName()
结果只是java.lang.String
。
我搜索了一下,在http://prideafrica.blogspot.com/2007/01/javalangclasscastexception.html
发现了类似的问题我尝试将泛型设置为String[]
,但最终出现了同样的错误。
如果向量包含java.lang.String
,为什么我会得到此强制转换异常?如何打印实际值?
请提供您的建议。
答案 0 :(得分:7)
因此,API不会返回字符串向量,而是返回字符串向量[]。
你应该能够迭代向量,然后,对于每个元素,循环遍历数组。
Iterator<String[]> iter = dataVector.iterator();
while( iter.hasNext()) {
String[] array = iter.next();
for(int i=0; i < array.length; i++)
{
System.out.println(i + ": " + array[i]);
}
}
答案 1 :(得分:4)
尝试比较他们的classLoaders。如果它们不同,则会发生此异常。
StringClass1.getClassLoader()==StringClass2.getClassLoader();
答案 2 :(得分:1)
无需使用迭代器。您可以使用elementAt(index)
的{{1}}方法打印值。使用Vector
循环获取For
。
示例:
Vector
如果你得到一个奇怪的答案(数字和字母),你得到一个Vector<?> dataVector = dataAPI.getReturnVector();
for(int i = 0; i < dataVector.size(); i++) {
System.out.println(dataVector.elementAt(i));
}
对象。这意味着您将使用String[]
的内置方法来打印Arrays
数组。请参阅以下评论。