0

可能重复:
Java 1.6:创建 List<T> 数组

如何在 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) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

编辑:

我的问题是我是一个接收泛型数组“T[] args”参数的类的客户端,在我的情况下,T 是一个泛型类型,例如 Vector,谢谢

我是 Java 新手。

4

4 回答 4

4

我不认为你可以创建一个泛型数组。看一下这个。Java 1.6:创建 List<T> 数组

这是因为类型信息在运行时不可用。

于 2013-01-09T14:55:07.867 回答
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[]不能向下转换为特定数组类型的 a。

顺便说一句,如果效率是一个问题,我会避免在集合中使用整数。你可以用 trove 代替。TIntArrayList是一个包装器int[]

List<TIntArrayList> a = new ArrayList<>();
TIntArrayList[] c = a.toArray(new TIntArrayList[a.size()]);
于 2013-01-09T14:56:09.290 回答
1

您可以删除通用声明

Vector[] c = new Vector[10];

或者用另一个向量或列表类型替换数组

List<Vector<Integer>> list = new ArrayList<Vector<Integer>>();
于 2013-01-09T15:00:30.060 回答
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));

我们无法创建“通用数组”。但是上面的行创建了一个包含大小向量的数组。并且每个数组槽都可以保存对参数化的引用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)
    }
于 2013-01-09T14:57:13.957 回答