如何创建泛型数组?

如何创建泛型数组?

我不明白泛型和数组之间的联系。

我可以用泛型类型创建数组引用:

private E[] elements; //GOOD

但不能创建具有泛型类型的数组对象:

elements = new E[10]; //ERROR

但它起作用了:

elements = (E[]) new Object[10]; //GOOD


牛魔王的故事
浏览 1303回答 3
3回答

蝴蝶刀刀

以下是LinkedList<T>#toArray(T[]):public&nbsp;<T>&nbsp;T[]&nbsp;toArray(T[]&nbsp;a)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(a.length&nbsp;<&nbsp;size) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;(T[])java.lang.reflect.Array.newInstance( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.getClass().getComponentType(),&nbsp;size); &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;Object[]&nbsp;result&nbsp;=&nbsp;a; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(Node<E>&nbsp;x&nbsp;=&nbsp;first;&nbsp;x&nbsp;!=&nbsp;null;&nbsp;x&nbsp;=&nbsp;x.next) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result[i++]&nbsp;=&nbsp;x.item; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(a.length&nbsp;>&nbsp;size) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[size]&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a;}简而言之,您只能通过Array.newInstance(Class, int)哪里int数组的大小。

翻过高山走不出你

问题是运行时泛型类型被删除。所以new E[10]相当于new Object[10].这将是危险的,因为可以将数组中的其他数据放入E类型。这就是为什么您需要显式地说出您想要的类型。创建对象数组并将其转换为E[]数组,或使用Array.newInstance(类组件类型,int长度)若要创建传入的类型数组的实际实例,请执行以下操作componentType装备。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java