为什么会有通用数组创建错误?

时间:2018-07-01 07:19:04

标签: java generics

class Generic<T> {}
Generic<Object>[] gib;
gib = new Generic<Object>[5]; // here is the line throwing Generic array creation error

我不明白为什么应该将此示例视为通用数组创建,因为到目前为止,我所看到的通用数组创建都是以Generic<T>[SIZE]之类的形式创建的,带有未知的类型参数。但是在此示例中,我将type参数显式设置为Object,我想我对通用数组的理解肯定存在一些缺陷,希望有人能提供帮助。

1 个答案:

答案 0 :(得分:1)

您无法执行此操作,因为在运行时,通用类型参数将被删除,并且您将失去类型安全性。

下面的代码段展示了这一点,摘自here

Object[] stringLists = new List<String>[];  // compiler error, but pretend it's allowed
stringLists[0] = new ArrayList<String>();   // OK
stringLists[1] = new ArrayList<Integer>();  // An ArrayStoreException should be thrown,
                                            // but the runtime can't detect it.

“运行时无法检测到”,因为类型参数在运行时消失了。运行时认为ArrayList<String>ArrayList<Integer>是同一件事-ArrayList。创建数组时放什么通用类型参数都没关系。