我想把list 转成数组
ADTO[] result = (ADTO[])list.toArray(new ADTO[5]);
我发现toArray方法的参数无论写new ADTO[5]还是写new ADTO[4],或new ADTO[2],或new ADTO[0]结果都一样的。这是为什么呢?下面是具体的代码:
import java.util.ArrayList;
import java.util.List;public class HelloWorld{

public static void main(String[] args){
HelloWorld h = new HelloWorld();
h.exercise();
}

private int exercise(){
List list = createList();
for(int i=0;i<10;i++){
ADTO aDTO = new ADTO();
aDTO.setName(String.valueOf(i+"fuck"));
list.add(aDTO);
}

ADTO[] result = (ADTO[])list.toArray(new ADTO[0]);
for(int i=0;i<result.length;i++){
System.out.println(result[i].getName());
}
return 0;

}

private List createList(){
return new ArrayList();
}
}class ADTO{
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}另外toArray的另一种重载方式toArray(),里面不用些任何参数,这种用法我一直没有试出来。

解决方案 »

  1.   

    问题1:toArray方法的参数无论写new ADTO[5]还是写new ADTO[4],他会先找新new的数组是否满足toArray转换后的长度。如果太小,则重新分配个大小合适的;如果太大,则多余部份都为null;问题2:那种不还参数的toArray()是list转成Object[]的数组,所以只能用Object中的方法了。
      

  2.   

    to chenyuelin311() :
    关于问题1确实如你所说,那么是否可以认为最保险的写法就是toArray(new ADTO[0]),因为它不足会自己补。多了出null会比较麻烦。
      

  3.   

    to chenyuelin311() :
    问题2:那种不还参数的toArray()是list转成Object[]的数组,所以只能用Object中的方法了。
    ============================================================
    请问这个Object[]的数组,我们定义的类不都是Object的子类吗?能给一个具体的用法吗?
    如果我写ADTO[] result = (ADTO[])list.toArray();会报异常的
      

  4.   

    ADTO[] result = (ADTO[])list.toArray(new ADTO[list.size()]);
      

  5.   

    用没参数的toArray()方法得到的是Object[]类的对像,而非Object[]子类对像,所以不能强制换为ADTO[]类。