在哪种情况下应该使用toArray()和toArray(T [] a)的重载版本?

时间:2015-05-18 11:29:25

标签: java collections casting

我从不使用toArray Object[] toArray(Object[] a)的重载版本将集合转换为数组。

下面的

是我的javacode -

public class Track {
 public static void main(String x[]) {
     ArrayList<String> iName = new ArrayList<String>();
     iName.add("Arpit1");
     iName.add("Arpit2");
     iName.add("Dubey1");
     iName.add("Dubey2");
     Object[] array= iName.toArray();

     for(int i=0;i<array.length;i++)
         System.out.println(array[i].getClass());
 }
 }

输出 -

  

class java.lang.String

     

class java.lang.String

     

class java.lang.String

     

class java.lang.String

预期 -

  

class java.lang.Object

还有一些与此相关的问题我经历了所有问题,但没有人指出我的问题。

2 个答案:

答案 0 :(得分:3)

您需要使用重载方法来获取相应类型的数组。否则返回的数组将始终为Object[]类型。

您的代码 - 使用不带参数的toArray()方法 - 返回一个对象数组,该数组无法强制转换为另一种类型的数组,因此会引发异常:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

答案 1 :(得分:0)

在继续前进之前,无论您的toArray方法的结果是什么,数组的元素将始终保持String类型。

 for(int i=0;i<array.length;i++)
     System.out.println(array[i].getClass());

因此,这将始终返回class java.lang.String。 如果您将元素存储在Object中,则可能会将元素转换为Object[],但事实并非如此。数组只是容器。

话虽如此,toArray的参数表示要构造的数组的类型。因此,您可以在Integer数组中存储Number[]的列表。