Тип приведения обычно требуется, только если вы используете предипики Java. . Если вы посмотрите на документы для Collection.toArray(T[])
вы увидите, что он знает, что тип массива, который возвращается такой же, как тип массива, переданного в Итак, вы можете написать:
List<String> list = new ArrayList<String>();
list.add("Foo");
String[] array = list.toArray(new String[0]);
Проходите в массиве, чтобы сообщить коллекции, какой тип результата вы хотите, что может не совпадать с типом в коллекции. Например, если у вас есть List<OutputStream>
вы можете преобразовать его к Object[]
, в Stream[]
или ByteArrayOutputStream[]
- очевидно, последний только будет работать, если каждый элемент на самом деле являетсяByteArrayOutputStream
. Это также означает, что если у вас уже есть массив нужного типа и размера, содержимое можно скопировать в него, а не создавать новый массив.
Предыдущая версия этого ответа была неточной, кстати - если вы используете перегрузку, которая не принимает каких-либо параметров, вы всегда вернуться к Object[]
, которые не могут быть отлиты:
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: Я только что заметил, что это также упоминается в ответе erdemoo, но это не может повредить его здесь :)
зависит от типа c. – gimel
Примечание: вы также можете использовать 'c.toArray (new String [] {});' –