[java.lang.String中;无法强制转换为java.lang.String

时间:2012-02-01 15:45:40

标签: java string vector classcastexception

我从产品的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,为什么我会得到此强制转换异常?如何打印实际值?

请提供您的建议。

3 个答案:

答案 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数组。请参阅以下评论。