воспроизведенных ссылка важна. Таким образом,
List list = new ArrayList<String>();
не имеет смысла. Он должен быть
List<String> list = new ArrayList<String>();
Если вы не не предоставлять в дженериков для ссылочного типа (не фактический тип объекта) он берется в качестве Object
. Поэтому вы можете добавить что-нибудь к нему.
Также дженерики - явление времени компиляции. Поэтому, когда вы говорите, как это работает, это означает, что ваш код компилируется без ошибок компиляции. По простой причине нет никаких дженериков, связанных с ссылочным объектом, и, следовательно, принимается как объект (по умолчанию).
У вас есть предупреждения о компиляторе? – shoover