如何在Java中初始化此数组。
Vector<Integer>[] c;
我已经尝试过了:
Vector<Vector<Integer>[]> a = new Vector<Vector<Integer>[]>();
Vector<Integer>[] c = (Vector<Integer>[])a.toArray();
出现以下错误:
线程“main”中的异常java.lang.ClassCastException: [Ljava.lang.Object;无法转换为[Ljava.util.Vector;在 app.Program.main(Program.java:38)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:601)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
编辑:
我的问题是我是一个接收通用数组“T [] args”参数的类的客户端,在我的情况下T是一个泛型类型,如Vector,谢谢
我是Java新手。
答案 0 :(得分:4)
我认为你不能创建一系列泛型。 看一下这个。 Java 1.6: Creating an array of List<T>
这是因为类型信息在运行时不可用。
答案 1 :(得分:2)
如果可以避免,我不会使用Vector。它在Java 1.2(1998)
中被ArrayList取代List<List<Integer>[]> a = new ArrayList<List<Integer>[]>();
List<Integer>[] c = (List<Integer>[]) a.toArray(new List[a.size()]);
toArray()
仅返回Object[]
,无法向下转换为特定的数组类型。
BTW如果效率是一个问题,我会避免在集合中使用Integer。你可以用trove代替。 TIntArrayList
是int[]
List<TIntArrayList> a = new ArrayList<>();
TIntArrayList[] c = a.toArray(new TIntArrayList[a.size()]);
答案 2 :(得分:1)
这是一个向量数组:
Vector<Integer>[] c = new Vector[2];
c[0] = new Vector<Integer>();
c[0] = new Vector<Object>(); // <- compiletime error
c[0].add(new Integer(0));
我们无法创建“通用数组”。但上面的行创建了一个可容纳 size 向量的数组。每个数组插槽都可以保存对参数Vector
的引用。
我们看到,即使数组本身不是通用的,变量c也被声明为泛型类型,这迫使我们只将Vector<Integer>
个实例放到数组中。
因此,如果忽略某些警告,我们可以向数组中添加其他向量...
Vector[] b = c; // <- warning
Vector<Double>[] a = b; // <- warning
a[1] = new Vector<Double>(); // <- the array itself allows that
a[1].add(new Double(0));
for (Vector<Integer> vector : c) {
Integer value = vector.get(0); // <- BOOM! (on second iteration)
}
答案 3 :(得分:1)
您可以删除通用声明
Vector[] c = new Vector[10];
或者用另一个向量或列表类型替换数组
List<Vector<Integer>> list = new ArrayList<Vector<Integer>>();