Потому что они делали это в спешке в первые дни Java и не понимали, что это может означать через четыре версии.
Обобщения должны были быть частью дизайна Java с самого начала, но эта функция была отброшена как слишком сложная и, в то время, ненужная. В результате большое количество кода в стандартных библиотеках написано в предположении неуниверсальных коллекций. Потребовался прототип языка «Пицца» от Мартина Одерского, чтобы показать, как они могут быть выполнены достаточно хорошо при поддержании почти идеальной обратной совместимости, как с Java-кодом, так и с байт-кодом. Прототип привел к Java 5, в которой классы коллекций были модифицированы с помощью дженериков таким образом, что старый код продолжал работать.
К сожалению, если бы они задним числом заставили Properties
наследовать от Map<String, String>
, то следующий ранее действительный код перестал бы работать:
Map<Object, Object> x = new Properties()
x.put("flag", true)
Почему кто-то так поступил, мне не под силу, но приверженность Sun обратной совместимости в Java перешла не только героическую, но и бессмысленную.
В настоящее время большинство образованных наблюдателей ценит то, что Properties
вообще не должен был унаследовать от Map
. Вместо этого он должен обернуться вокруг Map
, раскрывая только те функции Map, которые имеют смысл.
Со времени переизобретения Java Мартин Одерский начал создавать новый язык Scala, который стал чище, унаследовал меньше ошибок и открыл новые возможности в ряде областей. Если вы находите раздражение в Java, посмотрите на это.