List<String> i = new ArrayList<>();
List i2 = i;
i2.add(new MyClass());
Почему такая запись функционирует? i2 уже ждет object в параметрах add, а не стринги. От чего это происходит?
И так у вас есть объект с типом ArrayList<>;
И у вас есть две ссылки i == List<String>; i2 == List
В этот конкретный объект вы можете добавить абсолютно любой тип.
Но первой ссылкой i List<String> вы добавили ограничение типом String;
Соответственно используя ссылку i вы сможете добавлять только объекты типа String
Следующим шагом вы добавляете еще одну ссылку i2 на объект new ArrayList<>, которая уже не имеет ограничений. Соответственно, используя эту ссылку вы можете добавить переменные любого типа.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости