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]
通常只有在使用预泛型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;