今天在练习java集合LinkedList类库中的方法是遇到一个很奇怪的问题,请看下面代码:
LinkedList<String> llString=new LinkedList<String>(); String[] s=llString.toArray();
Myeclipse报错:Type mismatch: cannot convert from Object[] to String[]
于是我进行了强制类型转换,请看代码:
LinkedList<String> llString=new LinkedList<String>(); String[] s=(String[]) llString.toArray();
编译器不报错了!
帮助文档中对LinkedList的ToArray()方法是这么描述的:
public <T> T[] toArray(T[] a)
返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组;返回数组的运行时类型为指定数组的类型。如果指定数组能容纳列表,则在其中返回该列表。否则,分配具有指定数组的运行时类型和此列表大小的新数组。
如果指定数组能容纳列表,并有剩余空间(即数组比列表元素多),则紧跟在列表末尾的数组元素会被设置为 null。(只有 在调用者知道列表不包含任何 null 元素时,才可使用此方法来确定列表的长度。)
像 toArray() 方法一样,此方法充当基于数组的 API 与基于 collection 的 API 之间的桥梁。更进一步说,此方法允许对输出数组的运行时类型上进行精确控制,在某些情况下,可以用来节省分配开销。
假定 x 是只包含字符串的一个已知列表。以下代码可用来将该列表转储到一个新分配的 String 数组:
String[] y = x.toArray(new String[0]);
注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。
上面描述中也举例子, String[] y = x.toArray(new String[0]);没有进行强制转换类型。
我的疑问:上面我在声明 llString时,已经使用了范型来防止进行类型转换,为何在ToArray()前还要进行强制类型换换呢?这样范型的作用不久丢失了吗?
谢谢!
www说
慕斯709654
杨__羊羊
随时随地看视频慕课网APP
相关分类