La conversion de type est généralement nécessaire uniquement si vous utilisez des pré-génériques Java. . Si vous regardez la documentation pour Collection.toArray(T[])
vous verrez qu'il sait que le type du tableau qui est retourné est le même que le type de tableau passé en Ainsi, vous pouvez écrire:
List<String> list = new ArrayList<String>();
list.add("Foo");
String[] array = list.toArray(new String[0]);
Vous passez dans le tableau pour dire à la collection quel type de résultat vous voulez, ce qui peut ne pas être le même que le type dans la collection. Par exemple, si vous avez un List<OutputStream>
vous voudrez peut-être le convertir en un Object[]
, un Stream[]
ou un ByteArrayOutputStream[]
- évidemment ce dernier ne fonctionnera que si chaque élément estByteArrayOutputStream
. Cela signifie également que si vous avez déjà un tableau du bon type et de la bonne taille, le contenu peut être copié dans celui-ci au lieu de créer un nouveau tableau.
Une version précédente de cette réponse était inexacte par la voie - si vous utilisez la surcharge qui ne prend aucun paramètre, vous toujours récupérer un Object[]
qui ne peut pas être jeté:
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: Je viens de remarquer que cela est également mentionné dans la réponse d'erdemoo, mais ça ne peut pas faire mal ici :)
dépend du type de c. – gimel
note: vous pouvez également utiliser 'c.toArray (new String [] {});' –