Мы должны использовать бросок типа для object.toArray ()?

Да и да. Это означает, что данные не изменяются более чем одним потоком одновременно. Тем не менее, ваша программа может работать, как ожидалось, и выглядеть поточно-ориентированной, даже если это принципиально не так.

Обратите внимание, что непредсказуемость результатов является следствием «состояния гонки», которое, вероятно, приводит к изменению данных в порядке, отличном от ожидаемого.

7
задан phihag 29 June 2009 в 14:40
поделиться

3 ответа

Приведение типа обычно требуется только в том случае, если вы используете предварительные обобщения Java. Если вы посмотрите документацию для Collection.toArray (T []) , вы увидите, что он знает, что тип возвращаемого массива совпадает с типом переданного массива. Итак, вы можете написать:

List<String> list = new ArrayList<String>();
list.add("Foo");
String[] array = list.toArray(new String[0]);

Вы передаете массив, чтобы сообщить коллекции, какой тип результата вы хотите, который может не совпадать с типом в коллекции. Например, если у вас есть List , вы можете преобразовать его в Object [] , Stream [] или ByteArrayOutputStream [] - очевидно, что последний будет работать, только если каждый элемент на самом деле является a ByteArrayOutputStream .

12
ответ дан 6 December 2019 в 11:51
поделиться

если вы используете list.toArray (), он вернет вам массив объектов. Приведение к массиву String вызовет исключение, даже если элементы, хранящиеся в списке, относятся к типу String.

если вы используете list.toArray (Object [] a), он сохранит элементы списка в массиве «a». Если элементы внутри списка являются String, и вы даете массив String, тогда он будет хранить элементы внутри массива String, если данный массив недостаточно велик для хранения элементов внутри списка, тогда он будет расширять данный список.

4
ответ дан 6 December 2019 в 11:51
поделиться
  1. Да, вам нужно приведение вниз, поскольку типом возврата toArray является Object [].

  2. Вам необходимо передать (new String [0]) в качестве параметра, поскольку методу необходимо знать, какой тип массива он должен возвращать (массив строк, дат и т. Д.). Внутри все элементы списка фактически являются объектами, поэтому список не знает тип элементов, которые он содержит, и поэтому не знает, какой тип массива должен возвращать, если вы не укажете его в качестве параметра.

1
ответ дан 6 December 2019 в 11:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: