El java.util.Properties
est destinée à représenter une carte dont les clés et les valeurs sont toutes deux des chaînes. Cela est dû au fait que Properties
sont utilisés pour lire .properties
qui sont des fichiers texte.
Alors, pourquoi dans Java 5 ont-ils modifié cette classe pour implémenter Map<Object,Object>
et non Map<String,String>
?
El javadoc estados:
Comme Properties hérite de Hashtable, les méthodes put et putAll peuvent être appliquées à un objet Properties. Leur utilisation est fortement déconseillée car elles permettent à l'appelant d'insérer des entrées dont les clés ou les valeurs ne sont pas des chaînes de caractères. La méthode setProperty doit être utilisée à la place. Si la méthode store ou save est appelée sur un objet Properties "compromis" qui contient une clé ou une valeur autre qu'une chaîne de caractères, l'appel échouera.
Puisque les clés et les valeurs sont censées être des chaînes de caractères, pourquoi ne pas le faire respecter de manière statique en utilisant le type générique approprié ?
Je suppose que faire Properties
mettre en œuvre Map<String,String>
ne serait pas entièrement rétrocompatible avec le code écrit pour la version pré-Java 5. Si vous avez un code plus ancien qui insère des chaînes de caractères dans un objet Properties, ce code ne compilera plus avec Java 5. Mais... n'est-ce pas une bonne chose ? Le but des génériques n'est-il pas d'attraper de telles erreurs de type au moment de la compilation ?