Класс java.util.Properties
предназначен для представления карты, где ключи и значения являются строками. Это связано с тем, что объекты Properties
используются для чтения файлов .properties
, которые являются текстовыми файлами.
Итак, почему в Java 5 они модифицировали этот класс для реализации Map<Object,Object>
, а не Map<String,String>
?
javadoc утверждает:
Поскольку свойства наследуются от Hashtable, методы put и putAll могут быть применены к объекту Properties. Их использование сильно обескуражено, поскольку они позволяют вызывающему абоненту вставлять записи, ключи или значения которых не являются строками. Вместо этого следует использовать метод setProperty. Если метод store или save вызывается в "скомпрометированном" объекте "Свойства", который содержит не-String-ключ или значение, вызов будет терпеть неудачу.
Так как ключи и значения должны быть строками, то почему бы не принудительно установить это статически, используя правильный общий тип?
Я предполагаю, что создание Properties
реализации Map<String,String>
не будет полностью обратно совместимым с кодом, написанным для pre-Java 5. Если у вас есть более старый код, который привязывает non-strings к объекту Properties, тогда этот код больше не будет компилироваться с Java 5. Но... разве это не хорошо? Разве не все точки дженериков поймать такие ошибки типа во время компиляции?