通用类的数组

时间:2013-05-10 20:55:59

标签: java generics

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

Box Class:

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 个答案:

答案 0 :(得分:2)

Java不允许通用数组。

您可以在此处找到更多信息:Java Generics FAQ

要快速解决问题,请使用List(或ArrayList)代替数组。

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

问题的详细说明:  Java theory and practice: Generics gotchas

答案 1 :(得分:1)

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

 Box<Integer> arr = (Box<Integer>[]) new Box[10];

答案 2 :(得分:0)

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

  • 使用ArrayList<Box<Integer>>
  • 通过java.lang.reflect.Array.newInstance(clazz, length)
  • 使用反射(但您会收到警告)

答案 3 :(得分:0)

Box<Integer> arr = (Box<Integer>[])new Box<?>[10];