Приведение ArrayList <String>к строке [] - PullRequest
5 голосов
/ 07 мая 2011

1) Мне интересно, почему я не могу сделать это:

ArrayList<String> entries = new ArrayList<String>();
entries.add("entry");
String[] myentries = (String[])entries.toArray();

Что с этим не так? (Вы можете игнорировать вторую строку кода, это не относится к вопросу)

2) Я знаю, что моя цель может быть достигнута с помощью этого кода:

ArrayList<String> entries = new ArrayList<String>();
entries.add("entry");
String[] myentries = new String[entries.size()];
myentries = entries.toArray(myentries)

Является ли это предпочтительным способом преобразования ArrayList в String Array? Есть ли лучший / короткий путь?

Большое спасибо: -)

Ответы [ 4 ]

13 голосов
/ 07 мая 2011

В первом примере возвращается Object[], поскольку список не знает, какой тип массива вам нужен, и его нельзя преобразовать в String[]

. Второй можно немного сократить с помощью

String[] myentries = entries.toArray(new String[entries.size()]);
3 голосов
/ 07 мая 2011

Массив резервных копий, созданный ArrayList, не является массивом String, это массив Object, и поэтому вы не можете его привести.

Относительно случая 2. Это обычный способ преобразования его в массив, но вы можете сделать его немного менее многословным, написав:

String[] myentries = entries.toArray(new String[entries.size()]);
2 голосов
/ 07 мая 2011
List<String> list = ...;
String[] array = list.toArray(new String[list.size()]);
0 голосов
/ 07 мая 2011

Тип записей потерян (поскольку Generics стерты в Java). Поэтому, когда вы выполняете вызов toArray, он может возвращать только тип объекта обратно, поскольку он знает, что список должен содержать объекты. Таким образом, вы можете вернуть объект [] с вашими строками. Если вы хотите иметь массив строк, вам нужно передать его в метод toArray. С помощью приведения вы не можете сузить ссылку на массив, то есть вы не можете привести массив объектов в массив строк. Но вы можете пойти противоположным путем, поскольку они ковариантны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...