java中toArray正确用法有三种,toArray方法都需要带参数:
- publicstaticString[]vectorToArray1(Vector<String>v){
- String[]newText=newString[v.size()];
- v.toArray(newText);
- returnnewText;
- }
- publicstaticString[]vectorToArray2(Vector<String>v){
- String[]newText=(String[])v.toArray(newString[0]);
- returnnewText;
- }
- publicstaticString[]vectorToArray3(Vector<String>v){
- String[]newText=newString[v.size()];
- String[]newStrings=(String[])v.toArray(newText);
- returnnewStrings;
- }
而不带参数的toArray()是不行的,运行时会报ClassCastException异常:
- publicstaticString[]vectorToArray4(Vector<String>v){
- String[]newText=(String[])v.toArray();
- returnnewText;
- }
原因分析:
toArray有两个方法:
- publicObject[]toArray(){
- Object[]result=newObject[size];
- System.arraycopy(elementData,0,result,0,size);
- returnresult;
- }
- publicObject[]toArray(Objecta[]){
- if(a.length<size)
- a=(Object[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(),size);
- System.arraycopy(elementData,0,a,0,size);
- if(a.length>size)
- a[size]=null;
- returna;
- }
不带参数的方法,构造并返回一个Object数组对象,这时候向下转型为String数组对象,导致类型不兼容,报错。
而带参数的方法,构造的数组对象类型和参数的类型一致,故不存在转型。
转:http://ocre.iteye.com/blog/1354264