Дженерики Java в ArrayList.toArray ()

Скажите, что Вам определили arraylist следующим образом:

ArrayList<String> someData = new ArrayList<>();

Позже в Вашем коде, из-за дженериков можно сказать это:

String someLine = someData.get(0);

И компилятор знает напрямую, что это будет получать строку. Дженерики Yay! Однако это перестанет работать:

String[] arrayOfData = someData.toArray();

toArray() будет всегда возвращать массив Объектов, не дженерика, который был определен. Почему делает get(x) метод знает то, что он возвращает, но toArray() значения по умолчанию к Объектам?

58
задан 13 April 2016 в 22:40

1 ответ

Возможно создать "универсальный" массив данного (известного) типа. Обычно я использую что-то вроде этого в своем коде.

public static <T> T[] toArray(Class<T> type, ArrayList<T> arrList) {
    if ((arrList == null) || (arrList.size() == 0)) return null;
    Object arr = Array.newInstance(type, arrList.size());
    for (int i=0; i < arrList.size(); i++) Array.set(arr, i, arrList.get(i));
    return (T[])arr;
}
0
ответ дан 1 November 2019 в 14:15

Другие вопросы по тегам:

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