Я очень новичок в родовом программировании на Java.Почему это неправильно для создания массива Object []?
Я не понимаю, почему массивы родового типа не могут быть созданы.
T[] a = new T[size]; //why does this give an error?
Если общий тип означает, что общий заполнитель T
будет заменен на имя класса во время выполнения, что мешает нам создать массив, имеющий общие ссылки?
После недолгих поисков, я нашел обходной путь
T[] a = (T[])new Object[size]; //I don't get how this works?
Хотя я нашел решение, я до сих пор не понимаю, что мешает созданию общего массива. Предположим, что я создаю функцию, которая возвращает массив объектов.
public Object[] foo(){
return new Object[12];
}
А затем сделать вызов
String[] a = (String[])foo();
дает ClassCastException
. Но почему? Не похоже ли это на первую строку кода, в которой я передал массив Object в массив T?
T[] a = (T[])new Object[size];
Если это прошло без сбоев, почему не сделал этого?
Вы спросили в общей сложности шесть вопросов в один :) –
@SURESH АТТА Я чувствовал, что все они были связаны:/ –
@Djack: generic type ** не означает ** «что общий заполнитель T будет заменен именем класса во время выполнения». Он заменяется ** до ** времени выполнения «Объектом». Генераторы Java работают иначе, чем шаблоны C++. –