用List.toArray()返回Object[]数组强制转换的问题

有一个List对象list,里面的对象是某类型的数据,如:ClassA,  
代码:  
  ClassA[]   a   =   null;  
  a   =   (ClassA[])list.toArray();  
  结果在转换时抛出ClassCastException

 

代码:  
  ClassA[]   sc   =   null;  
  sc   =   (ClassA[])list.toArray(new   ClassA[list.size()]);  
  结果成功转换

/**  
            *   Returns   an   array   containing   all   of   the   elements   in   this   list  
            *   in   the   correct   order.  
            *  
            *   @return   an   array   containing   all   of   the   elements   in   this   list  
            *                 in   the   correct   order.  
            */  
          public   Object[]   toArray()   {  
  Object[]   result   =   new   Object[size];  
  System.arraycopy(elementData,   0,   result,   0,   size);  
  return   result;  
          }  
   
          /**  
            *   Returns   an   array   containing   all   of   the   elements   in   this   list   in   the  
            *   correct   order;   the   runtime   type   of   the   returned   array   is   that   of   the  
            *   specified   array.     If   the   list   fits   in   the   specified   array,   it   is  
            *   returned   therein.     Otherwise,   a   new   array   is   allocated   with   the   runtime  
            *   type   of   the   specified   array   and   the   size   of   this   list.<p>  
            *  
            *   If   the   list   fits   in   the   specified   array   with   room   to   spare   (i.e.,   the  
            *   array   has   more   elements   than   the   list),   the   element   in   the   array  
            *   immediately   following   the   end   of   the   collection   is   set   to  
            *   <tt>null</tt>.     This   is   useful   in   determining   the   length   of   the   list  
            *   <i>only</i>   if   the   caller   knows   that   the   list   does   not   contain   any  
            *   <tt>null</tt>   elements.  
            *  
            *   @param   a   the   array   into   which   the   elements   of   the   list   are   to  
            * be   stored,   if   it   is   big   enough;   otherwise,   a   new   array   of   the  
            *   same   runtime   type   is   allocated   for   this   purpose.  
            *   @return   an   array   containing   the   elements   of   the   list.  
            *   @throws   ArrayStoreException   if   the   runtime   type   of   a   is   not   a   supertype  
            *                   of   the   runtime   type   of   every   element   in   this   list.  
            */  
          public   Object[]   toArray(Object   a[])   {  
                  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;  
   
                  return   a;  
          }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值