gpt4 book ai didi

java - 泛型数组转换

转载 作者:行者123 更新时间:2023-12-01 21:18:10 25 4
gpt4 key购买 nike

我有以下代码:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com