Por lo general, el molde de tipo solo es necesario si usa Java pregenérico. . Si nos fijamos en los documentos de Collection.toArray(T[])
verá que se sabe que el tipo de la matriz que se devuelve es el mismo que el tipo de matriz pasada en el Así, se puede escribir:
List<String> list = new ArrayList<String>();
list.add("Foo");
String[] array = list.toArray(new String[0]);
Se pasa en la matriz para decirle a la colección qué tipo de resultado desea, que puede no ser el mismo que el tipo de la colección. Por ejemplo, si tiene un List<OutputStream>
es posible que desee convertir eso a un Object[]
, un Stream[]
o una ByteArrayOutputStream[]
- obviamente, este último sólo va a funcionar si todos los elementos de hecho es un ByteArrayOutputStream
. También significa que si ya tiene una matriz del tipo y tamaño correctos, los contenidos se pueden copiar en ese lugar en lugar de crear una nueva matriz.
Una versión anterior de esta respuesta fue incorrecta, por cierto - si se utiliza la sobrecarga que no toma ningún parámetro, que siempre vuelvas un Object[]
que no puede ser fundido:
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;
EDIT: yo sólo he dado cuenta de esto también se menciona en la respuesta de erdemoo, pero no puede hacer daño a tener aquí también :)
depende del tipo de c. – gimel
nota: también puede usar 'c.toArray (new String [] {});' –