Подтвердить что ты не робот

Когда вы создаете ArrayList без указания типа объекта, он создает его автоматически при добавлении первого объекта?

Например, вместо выполнения

ArrayList<ClassName> variableName;

вы делаете

ArrayList variableName;

а затем вы добавите объект типа "ClassName"

variableName.add(objectName);

автоматически установит тип вашего массива как

ArrayList<ClassName>

?

4b9b3361

Ответ 1

Нет. Дженерики предназначены только для времени компиляции. Вы просто теряете пользу этой проверки. Во время выполнения вся родовая информация удаляется

Другими словами,

ArrayList<Type> 

во время выполнения - это просто ArrayList. Преимущество выполнения этого только над списком заключается в том, что когда вы пишете свой код, компилятор проверяет, что вы не помещаете в свой список что-то неуместное.

Ответ 2

когда вы не укажете, он будет таким же, как если бы вы указали ArrayList <Object> , что означает, что любой тип объекта может быть добавлен в ArrayList. Проверки типов, которые выполняются при указании класса, выполняются во время компиляции, а не во время выполнения, поэтому невозможно, чтобы все работало так, как вы предлагаете (имея их более определенный класс, определенный во время выполнения).

Ответ 3

Реальный тип действительно ArrayList. Тип ArrayList<ClassName> существует только для компилятора (это называется стиранием), и его цель - предоставить безопасность типов на уровне компилятора. Но на уровне байт-кода у вас нет такого знания общих типов.