Как правило, Java можно рассматривать как язык, безопасный для типов. Я знаю, что есть некоторые недостатки с дженериками, но я недавно столкнулся с проблемой, которой я никогда не сталкивался. Чтобы сломать это:
Object[] objects = new Integer[10];
objects[0] = "Hello World";
НЕ приведет к ошибке времени компиляции, как ожидалось. Я бы предположил, что объявление массива Object
запретит указывать на массив чего-то другого. В Generics мне не разрешают делать такие странные вещи, как:
ArrayList<Object> objs = new ArrayList<Integer>
и если я попытаюсь сделать трюк Java, чтобы что-то сделать с
ArrayList<? extends Object> objects = new ArrayList<Integer>
Мне разрешено объявлять его, но я могу добавить только объекты типа null
.
Почему Java не препятствует объявлению таких массивных массивов?