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

In which condition which overloaded version of toArray() and toArray(T[] a) should be use?

我从不使用重载版本的 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

还有其他一些与此相关的问题,我已经全部解决了,但没有人指出我的查询。

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

类型

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

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

在继续之前,无论您的 toArray 方法的结果如何,数组的元素将始终保持 String.

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

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

也就是说,toArray的参数表示要构造的数组的类型。因此,您可以将 Integer 的列表存储在 Number[] 数组中。