Скажите, что Вам определили arraylist следующим образом:
ArrayList<String> someData = new ArrayList<>();
Позже в Вашем коде, из-за дженериков можно сказать это:
String someLine = someData.get(0);
И компилятор знает напрямую, что это будет получать строку. Дженерики Yay! Однако это перестанет работать:
String[] arrayOfData = someData.toArray();
toArray()
будет всегда возвращать массив Объектов, не дженерика, который был определен. Почему делает get(x)
метод знает то, что он возвращает, но toArray()
значения по умолчанию к Объектам?
Возможно создать "универсальный" массив данного (известного) типа. Обычно я использую что-то вроде этого в своем коде.
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;
}