2013-08-28 3 views
0

Почему бы не работать?Collection.toArray() метод, подробно об этом

List<String> lista = new ArrayList<>(); 
     lista.add("Lol"); 
     lista.add("ball"); 
     String [] array = (String[])lista.toArray(); 

Он бросает RunTimeException (ClassCastException), я знаю, что есть еще один метод, с целью возвращения объекта, содержащегося в списке, тем не менее, что происходит за кулисами? Я имею в виду, что я бросаю массив объектов, который на самом деле является массивом строк для массива строк. Поэтому он должен компилироваться, но это не так. Спасибо заранее.

ответ

2

List.toArray() возвращает Object[], из-за type erasure. Во время выполнения ваш список не знает, есть ли у него объекты String. Отсюда вы можете видеть, откуда эта ошибка.

Вы не можете печатать бросало Object[] в String[]

0

массив объектов не массив строк и не может быть приведен к одному.

Проверить this.

4

Эта версия toArray() возвращает Object[]. Вы не можете использовать массив Object в массив String, даже если все объекты в нем - это строки.

Вы можете использовать версию lista.toArray(new String[lista.size()]);, чтобы получить корректный вид.

+0

Я знаю об этом, как я указал в вопросе. Однако я хотел бы знать, почему. так как использование дженериков. Ясно, что это массив строк – Rollerball

0

использовать toArray (T [] a) вместо этого.

Т.е.

List<String> lista = new ArrayList<String>(); 
    lista.add("Lol"); 
    lista.add("ball"); 
    String [] array = lista.toArray(new string[1]); 

Это гарантирует, что ToArray возвращает массив типа String []

Как уже отмечалось, ToArray() возвращает массив типа Object [], и отлит из Object [] в строку [ ] является незаконным.

0

Список lista = новый ArrayList <>(); ---> Список lista = новый ArrayList();

-2

Есть две версии toArray(). Вы можете использовать другую!