2012-06-13 4 views
3

Можно создать дубликат:
why does List<String>.toArray() return Object[] and not String[]? how to work around this?Почему List.toArray() возвращает массив объекта?

Смотрите этот пример кода:

List<String> list = new ArrayList<String>(); 
    list.add("hello"); 
    list.add("world"); 
    Object [] array = list.toArray(); 

Почему метод toArray() возвращает массив Object? Другие методы List, такие как get(), remove(), могут возвращать типы объектов в списке.

+1

@SuperChafouin пожалуйста некоторые исследования, прежде чем отправлять вопрос. –

+1

Хорошо, это отвечает на мой вопрос: [http://stackoverflow.com/a/7909755/1075341](http://stackoverflow.com/a/7909755/1075341) Я отмечаю свой вопрос как дубликат. –

+0

Для тех, кто интересуется этим вопросом, я нашел лучший способ понять, это попытаться запрограммировать собственную реализацию 'toArray' с использованием дженериков или, например, посмотреть на код ArrayList. –

ответ

0

Я верю, что возвращает объект, чтобы быть общим. Скорее всего, он имеет дело с проблемами распределения памяти. Системе не нужно знать ваш точный тип inorder для выделения массива объектов. Вы не сталкиваетесь с этим с помощью get и remove, поскольку он возвращает только один элемент.

Но я отвечу на ваш вопрос в надежде, что кто-то сможет подтвердить мой ответ или исправить меня.

0

Это объясняет Java List#toArray.

+0

Ваши ссылки не работают –

+0

Ответ был отформатирован как код исправлен! – Wingman4l7

+3

Отныне, пожалуйста, обратитесь к действующей документации. Ссылка указывала на Java 1.4, в [Java 6] появилась новая документация (http://docs.oracle.com/javase/6/docs/api/java/util/List.html#toArray()) и [ Java 7] (http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#toArray()). –

1

вы можете использовать toArray(String[] a), который будет возвращать массив строкового типа или в основном массив указанного типа. Метод toArray возвращает объект, поскольку он действует как мост между API на основе Collection и List.

0

toArray() должен построить новый объект массива и заполнить его. Но из-за runtime generic type erasuretoArray() не знает, каков фактический тип элементов. из-за этого создается массив объекта (Object[]). Используйте <T> T[] toArray(T[] a), если вы хотите напечатать массив.

3
Because array has been in Java since the beginning, while generics 
were only introduced in Java 5. And the List.toArray() method was 
introduced in Java 1.2, before generics existed, so it was 
specified to return Object[]. 

и можно использовать toArray(T[] a) просто посмотрите Collection.toArray(T[] a)

Смежные вопросы