Я помню, что читал что-то об этом в книге Hardcore Java:
Проблема с проверкой элементов в
коллекция во время выполнения является то, что это
чрезвычайно дорогой; получатель чего-то
эффективность только O (n). Если у вас есть
только 10 адресов в вашей коллекции,
проверить элементы легко. Однако если
Коллекция содержит 15 000
адреса, то вы бы понесли
значительные накладные расходы, когда кто-то
вызывает сеттер.
С другой стороны, если
вы можете запретить пользователям размещать
что-нибудь кроме адреса в вашем
сбор во время компиляции, то вы
не нужно проверять типы в
во время выполнения. Если они попытаются дать вам
то, что не является адресом, то
компилятор отклонит попытку.
Это именно то, что параметризовано
типы делают.
Однако на вопросы «почему» никогда нельзя дать удовлетворительный ответ, потому что слишком много переменных связано с людьми, временем, местом и политикой. Я помню, как читал где-то еще, что решение было во многом связано с поддержанием совместимости с тем, как все уже делалось в байт-коде Java. Вот еще одна цитата из этой же книги:
После того, как компилятор разрешил безопасность типов, введенную обобщениями, он удаляет параметризацию из типа. Поэтому информация недоступна во время выполнения. Как утверждает Sun, цель удаления - позволить библиотекам классов, созданным на основе более старой версии JDK, работать на виртуальной машине JDK 1.5.
Мне любопытно, каковы преимущества дженериков времени выполнения?