Оракул doc говорит, что дженерики реализованы в java, используя стирание типа метода, и так оно и работает.Стирание стилей Java и массивы
- Заменить все типы параметров в общих типах с их границами или объектом, если параметры типа являются неограниченными. Таким образом, полученный байт-код содержит только обычные классы, интерфейсы и методы.
- Вставьте тип приведения, если необходимо, для сохранения безопасности типа.
- Создание мостовых методов для сохранения полиморфизма в расширенных общих типах.
Так что, если у меня есть универсальный класс сказать контейнер, как показано ниже:
class Container<T>{
T initialValue;
List<T> valueList=new ArrayList<T>();
public List<T> getValueList(){
return valueList;
}
}
это эквивалентно класс будет выглядеть после обработки типа стирания:
class Container{
Object initialValue;
List valueList=new ArrayList();
public List getValueList(){
return valueList;
}
}
Поправьте меня, если неправильно здесь
Аналогичным образом, если модифицировать вышеуказанный класс, как указано ниже
class Container<T>{
T initialValue;
List<T> valueList=new ArrayList<T>();
T[] arrayValue;
public Container(T[] array){
arrayValue=array;
}
public List<T> getValueList(){
return valueList;
}
}
не будет этим эквивалентом ???
class Container{
Object initialValue;
List valueList=new ArrayList();
Object[] arrayValue;
public Container(Object[] array){
arrayValue=array;
}
public List getValueList(){
return valueList;
}
}
, если это так, то я должен также иметь так: T[] arrayValue=new T[10];
// Ошибка компиляции времени; как выше заявление будет получить преобразованы в
Object[] arrayValue=new Object[10];
Нужна ясность о том, как работает тип стирания для Массивы в Java ??
Что такое ошибка, которую вы видите, с какой код, в частности? Не совсем понятно, что вы спрашиваете. – pvg
почему T [] arrayValue = new T [10]; не допускается. Почему мы не можем создать массив Object с параметризованным типом. –