线程“main”java.lang.ArrayStoreException中的异常

时间:2015-05-26 10:12:08

标签: java arrays

需要帮助...我试图通过以下代码将对象类型数组转换为String类型数组:

Object matNodes[] = null;
Iterable<Vertex> vertex = tb.printNodes();
Iterator itr = vertex.iterator();
if(vertex.iterator().hasNext()){
    matNodes = IteratorUtils.toArray(itr);
}
String[] stringArray = Arrays.asList(matNodes).toArray(new String[matNodes.length]);

但要低于例外......

Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.Arrays$ArrayList.toArray(Unknown Source)

任何人都可以指导我解决这个问题。

4 个答案:

答案 0 :(得分:0)

使用Arrays.copyOf: -

String[] stringArray = Arrays.copyOf(matNodes, matNodes.length, String[].class);

示例Ex: -

Object matNodes[] = new Object[3];
    matNodes[0] = "abc";
    matNodes[2] = "fde";
    matNodes[1] = "qw";
    String[] stringArray = Arrays.copyOf(matNodes, matNodes.length, String[].class);

答案 1 :(得分:0)

来自ArrayStoreException

  

抛出此异常表示已尝试将错误类型的对象存储到对象数组中。例如,以下代码生成ArrayStoreException:

 Object x[] = new String[3];
 x[0] = new Integer(0);

有关详细信息,请参阅this link

如果您的数组matNode是对象的类型,并且该数组中的所有对象都是String的类型,那么您的程序将起作用。
但是如果matNode数组包含除String以外的对象,则代码将抛出给定的异常。

如果您不确定Type:

,请使用循环
int toSize=matNodes.length;
String[] stringArray=new String[toSize];

for (int i = 0; i < toSize; i++) {
    stringArray[i] = matNodes[i].toString();
} 

答案 2 :(得分:0)

实际上您收到的是ArrayStoreException,因为您试图将此行中的Iterator转换为array

if(vertex.iterator().hasNext()){
    matNodes = IteratorUtils.toArray(itr); //itr here is an iterator
}

换句话说,您正试图将iterator放入一个字符串数组中。

您应该使用itr.next()获取迭代对象并将其放入数组中,更改您的代码如下:

if(vertex.iterator().hasNext()){
   matNodes = IteratorUtils.toArray(itr.next()); //Here you get the iterated object
}

答案 3 :(得分:-1)

这里的例外是合理的。你不能把任何对象放在字符串数组中。