如何在Java中创建类型变量数组?

Joh*_*oth 4 java arrays generics

在Java中,可以声明一个类型变量数组,但我无法创建数组.这不可能吗?

class ClassName<T> {
    {
        T[] localVar; // OK
        localVar = new T[3]; // Error: Cannot create a generic array of T
    }
}
Run Code Online (Sandbox Code Playgroud)

Jig*_*shi 5

Java中没有通用类型的数组.你可以去找ArrayList

说明:

java中的数组是协变类型.

Java数组具有类型是协变的属性,这意味着超类型引用的数组是子类型引用数组的超类型.也就是说,它是例如Object[]的超类型String[].作为协方差的结果,所有类型规则都适用于子类型和超类型的惯例:子类型数组可以分配给超类型数组变量,子类型数组可以作为参数传递给期望超类型数组的方法,等等等等这是一个例子:

Object[] objArr = new String[10];// fine
Run Code Online (Sandbox Code Playgroud)

相反,泛型集合不是协变的.超类型的参数化类型的实例化不被认为是子类型的相同参数化类型的实例化的超类型.也就是说,a LinkedList<Object>不是超类型,LinkedList<String>因此LinkedList<String>不能在LinkedList<Object>期望的地方使用; 在相同参数化类型的两个实例之间没有赋值兼容性等.这是一个说明差异的示例:

LinkedList<Object> objLst = new LinkedList<String>(); // compile-time error
Run Code Online (Sandbox Code Playgroud)

资料来源:http://www.angelikalanger.com/Articles/Papers/JavaGenerics/ArraysInJavaGenerics.htm