我有ArrayList
collection
个元素 - [10, 20, 30]
当我使用
时(collection).toArray(new Integer[0])
一切正常。
但有时我必须将UnmodifiableRandomAccessList
collection
转换为数组。
所以当我使用相同的代码时:
(collection).toArray(new Integer[0])
我收到一个例外:
java.lang.ArrayStoreException
at java.util.ArrayList.toArray(ArrayList.java:407)
at java.util.Collections$UnmodifiableCollection.toArray(Collections.java:1034)
在这种情况下如何正确转换收藏?是否存在任何集合类型不可知toArray()
方法实现(例如在Apache commons中)?
答案 0 :(得分:2)
抛出此异常表示已尝试将错误类型的对象存储到对象数组中。例如,以下代码生成ArrayStoreException:
Object x[] = new String[3];
x[0] = new Integer(0);
https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayStoreException.html
答案 1 :(得分:1)
您始终可以通过Stream
将任何类型的集合转换为数组。
Integer[] intArray = collection.stream().toArray(Integer[]::new);