为什么toArray
中没有仅接受类型的List
变体,例如:
Foo[] array = list.toArray(Foo.class);
// or
Foo[] array = list.toArray(Foo[].class);
我见过
// existing array
Foo[] array = list.toArray(array);
// Fake array
Foo[] array = list.toArray(new Foo[0]);
但是,当我只想指定类型而不创建不必要的一次性数组时,创建一个空数组对我来说似乎是低效和违反直觉的。
最佳答案
从接口(interface)的角度来看,我同意。
该方法只需要类型(除了副作用),因此只需要类型是合适的。
我想,主要原因是效率。仅采用该类型的实现要慢得多,尽管我没有检查实现细节(请参阅.toArray(new MyClass[0]) or .toArray(new MyClass[myList.size()])?和博客Arrays of Wisdom of the Ancients中的基准)。
但是,请注意,自Java 11以来,我们有了一个新的变体,它更接近您想要的,并且在这种情况下也更合适:
toArray(Foo[]::new)
从其documentation:
该方法不需要反射,因为您直接提供了生成器。
总结一下,如今您应该使用
toArray()
(如果需要)(非常合适),Object[]
(如果要重用现有数组(应该足够大)),toArray(T[])
(如果要输入safety和一个新数组)。 关于java - 为什么没有toArray(Class <T>)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57296408/