2013-12-01 5 views
3

Согласно java doc для toArray() Возвращает массив, содержащий все элементы этой коллекции.Разница между Collection.toArray() и Collection.toArray (Object obj [])

и toArray (объект obj []). Возвращает массив, содержащий все элементы этой коллекции; тип выполнения возвращаемого массива - тип указанного массива.

первый toArray() я понимаю, но второй toArray (объект obj []) я не могу понять. Пожалуйста, объясните пример.

+0

[расширенный Javadoc] (http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#toArray()) для 'toArray (T [])' объясняет это довольно красиво, по-моему ... – Makoto

ответ

4

Один общий, другой нет. toArray() вернет Object[], а toArray(T[]) вернет массив типа T[].

Пример:

public static void main(String[] args) { 
    Object[] baseArray = new ArrayList<String>().toArray(); 
    System.out.println(baseArray.getClass().getCanonicalName()); 

    String[] improvArray = new ArrayList<String>().toArray(new String[5]); 
    System.out.println(improvArray.getClass().getCanonicalName()); 
} 

Выход:

java.lang.Object[] 
java.lang.String[] 
+0

Спасибо, Jeroen, можно объяснить на примере? –

+0

Я редактировал свое сообщение с примера. Используя перегруженную версию с общим параметром, вы можете указать тип результирующего массива. Это позволит вам использовать определенный тип вместо 'Object'. –

1

Прежде всего, второй метод toArray(T[] a) вместо toArray(Object[] a). T в первом заголовке функции называется параметром типа, что означает, что фактический класс относится к изменениям в зависимости от способа вызова метода. Параметр типа может использоваться методом toArray для выполнения действий с использованием типа T, не зная, что такое T.

В этом примере T будет String:

x.toArray(new String[0]) 

В этом примере T будет Integer:

x.toArray(new Integer[0]) 

В этом примере T будет MyClass:

x.toArray(new MyClass[0]) 

Метод toArray(T[] a) использует предоставленную информацию о типе для возврата массива заданного типа. Например, первый пример вернет массив типа String, а второй пример вернет массив типа Integer.

В результате, вызов toArray() дает тот же результат (массив Object) в качестве вызова toArray(new Object[0]).

Дополнительную информацию о дженериках можно найти на странице this tutorial.

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