Я пытаюсь понять, почему java.util.Properties был реализован таким образом. Он имеет два интерфейса: getProperty/setProperty, который принимает только строки, а put/get принимает любой объект в качестве значения. Эти два интерфейса кажутся перекрывающимися, поэтому строка, добавленная с помощью put(), может быть получена с помощью getProperty().Ввод объектов в java.util.Properties
Кажется, что есть некоторые проблемы с этим странным гибридным интерфейсом. Помещение объекта, который переопределяет свойство строки, имеет побочный эффект очистки строкового значения, создавая нуль как результат getProperty. Добавление целого числа или какого-либо другого значения, которое имеет простой перевод строк, может быть неправильно понято как значение реального свойства (но в качестве свойства оно всегда равно нулю).
Мой вопрос: есть ли реальная, практическая причина для этого? Как я подозреваю?
Я не могу создать резервную копию, но я уверен, что проблема связана с обратной совместимостью. 'Свойства' расширяет' Hashtable', который является старым классом из-под дженериков; это означает, что если у вас есть «Свойства», вы могли бы вызвать в него значение 'property.put (whatthing, whateverElse)'. Когда появились дженерики, люди Java хотели сохранить совместимость кода обратно, а это означало, что он расширяет «Hashtable
'Свойства' является подклассом' Hashtable', без переопределения 'get' /' put', следовательно, поведение. 'getProperty' /' setProperty' - это типизированные версии 'get' /' put'. Это вопрос истории, а не скрытие get/put. –