Когда вы создаете ArrayList без указания типа объекта, он создает его автоматически при добавлении первого объекта?
Например, вместо выполнения
ArrayList<ClassName> variableName;
вы делаете
ArrayList variableName;
а затем вы добавите объект типа "ClassName"
variableName.add(objectName);
автоматически установит тип вашего массива как
ArrayList<ClassName>
?
Ответы
Ответ 1
Нет. Дженерики предназначены только для времени компиляции. Вы просто теряете пользу этой проверки. Во время выполнения вся родовая информация удаляется
Другими словами,
ArrayList<Type>
во время выполнения - это просто ArrayList. Преимущество выполнения этого только над списком заключается в том, что когда вы пишете свой код, компилятор проверяет, что вы не помещаете в свой список что-то неуместное.
Ответ 2
когда вы не укажете, он будет таким же, как если бы вы указали ArrayList <Object> , что означает, что любой тип объекта может быть добавлен в ArrayList. Проверки типов, которые выполняются при указании класса, выполняются во время компиляции, а не во время выполнения, поэтому невозможно, чтобы все работало так, как вы предлагаете (имея их более определенный класс, определенный во время выполнения).
Ответ 3
Реальный тип действительно ArrayList
. Тип ArrayList<ClassName>
существует только для компилятора (это называется стиранием), и его цель - предоставить безопасность типов на уровне компилятора. Но на уровне байт-кода у вас нет такого знания общих типов.