История изменений
Исправление den73, (текущая версия) :
Ну получается, что они добавили сахар, который выглядит как надёжный механизм контроля типов, но который таковым не является из-за того, что внутри информации о типах нет.
Зло возникает здесь:
List<? super Mouse> maybeMouses = items;
Наверное, теоретически можно было бы заставить компилятор это ловить, но если items - это вообще object, к-рый пришёл параметром, то проверить корректность невозможно ни в compile-time, ни в runtime. Т.е. это нехилая дыра в надёжности языка.
Попробую понять, как обстоит дело в C# - и обстоит оно вот так:
https://stackoverflow.com/questions/31693/what-are-the-differences-between-ge...
В C# в рантайме известно, что List<Mouse> хранит экземпляры Mouse, и это правильно. А в Java просто кривое решение из-за совместимости, которое не стоит рассматривать как образец для подражания.
Исходная версия den73, :
Ну получается, что они добавили сахар, который выглядит как надёжный механизм контроля типов, но который таковым не является из-за того, что внутри информации о типах нет.
Зло возникает здесь:
List<? super Mouse> maybeMouses = items;
Наверное, теоретически можно было бы заставить компилятор это ловить, но если items - это вообще object, к-рый пришёл параметром, то проверить корректность невозможно ни в compile-time, ни в runtime. Т.е. это нехилая дыра в надёжности языка.
Попробую понять, как обстоит дело в C#