【发布时间】:2015-09-15 13:47:51
【问题描述】:
我对 Java 中的泛型编程非常陌生。
我不明白为什么不能创建泛型类型的数组。
T[] a = new T[size]; //why does this give an error?
如果泛型类型意味着泛型占位符T将在运行时被类名替换,是什么阻止我们创建具有泛型引用的数组?
经过一番搜索,我找到了一种解决方法
T[] a = (T[])new Object[size]; //I don't get how this works?
虽然我找到了解决方案,但我仍然无法理解是什么阻止了创建泛型数组。
假设我创建了一个返回 Object 数组的函数。
public Object[] foo(){
return new Object[12];
}
然后拨打电话
String[] a = (String[])foo();
给出一个 ClassCastException 。但为什么?
它看起来不像我将 Object 数组转换为 T 数组的第一行代码吗?
T[] a = (T[])new Object[size];
如果这没有故障,那为什么不呢?
【问题讨论】:
-
你一共问了六个问题:)
-
@SURESH ATTA 我觉得它们都是相关的:/
-
@Djack:泛型类型并不意味着“泛型占位符 T 将在运行时替换为类名”。它被
Object替换before 运行时。 Java 泛型与 C++ 模板的工作方式不同。
标签: java arrays object generics