Vector
可能包含不同类型的对象。调用toArray()
方法是返回Object[]
数组还是特定对象数组(例如Integer
,Double
)?我猜它不会返回特定的对象数组,因为数组只能有一种类型的对象。
是否有办法根据Vector
中包含的对象类型创建多个特定于对象的数组?
答案 0 :(得分:6)
Vector
和任何Collection
对象都有2个方法:toArray()
返回Object[]
和toArray(T[])
,您必须提供正确类型的数组
如果你有一个Integer
的集合,这将有效:
Vector<Integer> vector = ...
Integer[] myInts = vector.toArray(new Integer[vector.size()]);
请注意,我创建了一个矢量大小的数组。这实际上并不是必需的,但会加快速度,否则Java将不得不使用反射来确定类型并创建一个正确大小的数组。
如果您的Collection具有不同的不兼容类型的混合,并且您提供的数组无法用于存储它们,则JVM将在运行时处抛出java.lang.ArrayStoreException
你打电话给toArray(array[])
Vector<Object> vector = new Vector<>();
vector.add(Integer.valueOf(2));
vector.add(Double.valueOf(3.14));
vector.toArray(new Integer[vector.size()]); //<-- throws ArrayStoreException
但是,使用向量中的所有对象兼容的对象数组是可以的。
这将有效,因为Integer
和Double
都延伸Number
Number[] myNumbers = vector.toArray(new Number[vector.size()]);
答案 1 :(得分:1)
因为你只能从方法返回1个对象,所以这样做的方法是创建一个ManyMap,使用该类对象的列表/数组索引每个对象的Class / p>