1

我有一个 Box 类,它包含一个值,我想创建一个此类的数组。

盒子类:

public class Box<T> {
    public T t;
    public Box(T t){ this.t = t; }
}

测试类:

public class Test {
    public static void main(String[] args) {
        Box<Integer>[] arr = new Box<Integer>[10];
    }
}

编译器说:

无法创建 Box 的通用数组

我想知道为什么我们不能这样做,我该怎么做?

4

4 回答 4

2

Java 不允许泛型数组。

您可以在此处找到更多信息:Java 泛型常见问题解答

为了快速修复,请使用List(或ArrayList)而不是 Array。

List<Box<Integer>> arr = new ArrayList<Box<Integer>>();

问题详解: Java理论与实践:泛型陷阱

于 2013-05-10T20:59:36.943 回答
1

这曾经有效(产生警告),仍然应该做你需要的:

 Box<Integer> arr = (Box<Integer>[]) new Box[10];
于 2013-05-10T21:01:44.627 回答
0

不,你不能因为类型 erasure,有两种可能的解决方法:

  • 使用ArrayList<Box<Integer>>
  • 通过使用反射(但你会收到警告)java.lang.reflect.Array.newInstance(clazz, length)
于 2013-05-10T20:59:07.390 回答
0
Box<Integer> arr = (Box<Integer>[])new Box<?>[10];
于 2013-05-10T23:42:54.597 回答