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
,我想我对通用数组的理解肯定存在一些缺陷,希望有人能提供帮助。
答案 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
。创建数组时放什么通用类型参数都没关系。