java - 泛型数组转换

标签 java arrays generics

我有以下代码:

public class GenericsTest<T> {

        private T[] array1;
        private String[] array2;

        public GenericsTest() {
            array1 = (T[]) new Object[10];
            array2 = (String[]) new Object[10];
        }

        public T[] getArray1() {
            return array1;
        }

        public void setArray1(T[] array1) {
            this.array1 = array1;
        }

        public String[] getArray2() {
            return array2;
        }

        public void setArray2(String[] array2) {
            this.array2 = array2;
        }

        public static void main(String[] args) {
            new GenericsTest<String>();
        }

    }

代码在以下行崩溃:

array2 = (String[]) new Object[10];

但它可以很好地工作:

array1 = (T[]) new Object[10];

正如您在main()方法中看到的,T是一个String。所以我猜编译器会将 T 更改为 String

private T[] array1;

array1 = (T[]) new Object[10] 将被翻译为 array1 = (String[]) new Object[10]

所以为什么 array2 = (String[]) new Object[10] 失败并且(T[]) new Object[10] 不是吗?

最佳答案

因为泛型类型在编译后会丢失,而你所有的泛型<T>将转化为Object ,所以,当你这样做时

(T[]) new Object[10];

它等于

(Object[]) new Object[10];

当然它不等于

(String[]) new Object[10];

关于java - 泛型数组转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39595899/

相关文章:

java - 返回子类对象的通用 getter

java - Azure根据请求id获取操作状态java sdk

java 8 Docker 错误指定的 VM 选项 'InitialRAMPercentage=XX'

java - 用 Java 制作游戏时的线程问题

java - 将 0 移动到数组末尾

generics - 编写接受具有特定方法的对象的方法的语法

绑定(bind)到任何类型范围的 Java 泛型参数

java - Java 中的 new ArrayList<Class>() 还是 new ArrayList<>()?

c++ - 使用数组 vector 的正确方法

arrays - 为什么可表达到自身的映射数组会产生错误?