🎊 Java 中为什么不能创建泛型数组?

Java 中为什么不能创建泛型数组?

之前只是知道在 Java 中不能创建泛型数组,今天翻看 《Effective Java》其中对这个部分有讲解,记录一下。

现在我们假设在 Java 中可以创建泛型数组,看看可能会发生什么情况:

// 假设可以创建泛型数组

List[] stringLists = new ArrayList[1];

List intList = Arrays.asList(42);

// 泛型擦除,List 继承自 Object,所以可以如此赋值

// 在数组中,子类数组 是 父类数组 的子类,Object[] o = new ArrayList[1];

Object[] objects = stringLists;

// 同理,泛型擦除后,List 类型变量赋值给 Object 类型变量

// 但此时出现问题了,**** List 实例添加到了声明为 List[] 类型的数组中了 ******

objects[0] = intList;

String s = stringLists[0].get(0);

由于泛型擦除,结果就是泛型的检查作用失效,可以将 List 类型的值添加到 List[] 类型的数组中。

而这类问题在编译时无法发现,只能在运行时出现问题

所以如果禁止创建泛型数组,就可以避免此类问题

另:

public class Main {

static class A {}

static class B extends A {}

public static void main(String[] args) {

A[] arraya = new A[5];

B[] arrayb = new B[5];

// 可以正常赋值,B[] 是 A[] 的子类

arraya = arrayb;

List lista = new ArrayList();

List listb = new ArrayList();

// lista = listb 编译错误,List 不是 List 的子类

}

}

🎁 相关推荐

欧路词典|英汉-汉英词典 player是什么意思
🎯 beat365体育

欧路词典|英汉-汉英词典 player是什么意思

📅 07-29 👀 130
以下是一些常见普通客机的价格:波音737系列-波音737-700:约5850-6
“狼人杀”
🎯 beat365体育

“狼人杀”

📅 08-06 👀 8927

恭祝您浏览愉快!