Java 我们应该对object.toArray()使用类型转换吗?

Java 我们应该对object.toArray()使用类型转换吗?,java,arrays,list,Java,Arrays,List,第一:这里需要类型转换吗?(我认为我们应该像(String[])c.toArray();那样编写,但我认为它只是c.toArray(),而不使用类型转换。这有效吗 第二:我们为什么要编写新字符串[0] 是的,您需要向下转换,因为toArray的返回类型是Object[] 您需要将(新字符串[0])作为参数传递,因为该方法需要知道它应该返回什么类型的数组(字符串数组、日期等)在内部,所有列表元素实际上都是对象,因此列表不知道它所持有的元素的类型,因此它不知道应该返回哪种类型的数组,除非您将其作为参

第一:这里需要类型转换吗?(我认为我们应该像
(String[])c.toArray();
那样编写,但我认为它只是
c.toArray()
,而不使用类型转换。这有效吗

第二:我们为什么要编写新字符串[0]

  • 是的,您需要向下转换,因为toArray的返回类型是Object[]

  • 您需要将(新字符串[0])作为参数传递,因为该方法需要知道它应该返回什么类型的数组(字符串数组、日期等)在内部,所有列表元素实际上都是对象,因此列表不知道它所持有的元素的类型,因此它不知道应该返回哪种类型的数组,除非您将其作为参数提供


  • 通常只有在使用预泛型Java时才需要类型转换。如果查看
    Collection.toArray(T[])
    的文档,您会发现它知道返回的数组类型与传入的数组类型相同。因此,您可以编写:

    String[] a = c.toArray(new String[0]);
    

    编辑:我刚刚注意到,在Erdemo的回答中也提到了这一点,但把它放在这里也没什么坏处:)

    如果使用list.toArray(),它将返回对象数组。 即使列表中存储的元素是字符串类型,强制转换到字符串数组也会引发异常


    若您使用的是list.toArray(对象[]a),它将把列表中的元素存储到“a”数组中。如果列表中的元素是字符串,并且您给出了字符串数组,那么它将在字符串数组中存储元素;如果给定数组不够大,无法在列表中存储元素,那么它将展开给定列表。

    (已澄清并更正)。Johanna,我真的不理解这个评论-你能再解释一下你的意思吗?如果数组的元素多于集合,我们可以使用新字符串[0],这是真的吗?你是什么意思?您可以始终使用“新字符串[0]”,它将为您创建一个大小合适的新数组。注意:您也可以使用“c.toArray(新字符串[]{});”
    List<String> list = new ArrayList<String>();
    list.add("Foo");
    String[] array = list.toArray(new String[0]);
    
    List<String> list = new ArrayList<String>();
    list.add("Foo");
    
    // toArray doesn't know the type of array to create
    // due to type erasure
    Object[] array = list.toArray();
    
    // This cast will fail at execution time
    String[] stringArray = (String[]) arrray;