需要帮助...我试图通过以下代码将对象类型数组转换为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)
任何人都可以指导我解决这个问题。
答案 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:
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)
这里的例外是合理的。你不能把任何对象放在字符串数组中。