Страницы

Поиск по вопросам

воскресенье, 7 апреля 2019 г.

Почему класс Properties расширяет Hashtable?

Будучи ещё только неработающим студентом, я не могу позволить себе думать, что разработчики стандартной библиотеки допускают столь заметные промахи, поэтому хочу уточнить, может в этом есть какой-то сакральный смысл?
В общем из-за того что, Properties extends Hashtable мы ведь имеем кучу проблем, типа:
Because Properties inherits from Hashtable, the put and putAll methods can be applied to a Properties object. Their use is strongly discouraged as they allow the caller to insert entries whose keys or values are not Strings.
Почему нельзя было принять другое решение, типа Properties extends Hashtable? Или вообще использовать композицию, чтобы не было возможности вызывать методы из класса Hashtable, а видны были только открытые методы самого класса Properties?


Ответ

Обратите внимание, что в javadoc-е класса java.util.Properties есть пометка @since JDK1.0. Т.е. класс существует со времен версии JDK 1.0.
Это обстоятельство влечет за собой пару последствий:
Поскольку это была первая версия API, то у разработчиков действительно был простор для неловких решений и косяков. Среди классов, появившихся до Java 5 можно найти немало таких примеров. Взять хотя бы java.net.URL До Java 5 не существовало обобщенных типов. То есть на самом деле Properties наследовал не Hashtable, а просто Hashtable. После появления generic-ов Hashtable стал эквивалентен Hashtable. И для поддержания краеугольного камня Java - обратной совместимости - нельзя было изменить контракт и начать использовать Hashtable

Комментариев нет:

Отправить комментарий