La clase java.util.Properties
representa un mapa donde las claves y los valores son ambos Strings. Esto se debe a que los objetos Properties
se utilizan para leer los archivos .properties
, que son archivos de texto.Por qué java.util.Properties implementa Map <Object, Object> y no Map <String, String>
Entonces, ¿por qué en Java 5 modificaron esta clase para implementar Map<Object,Object>
y no Map<String,String>
?
Los javadoc estados:
Dado que las propiedades hereda de Hashtable, la opción de venta y métodos putAll se pueden aplicar a un objeto Properties. Se desaconseja enérgicamente su uso ya que permiten a la persona que llama insertar entradas cuyas claves o valores no son cadenas. El método setProperty se debe usar en su lugar. Si se llama al método store o save en un objeto Properties "comprometido" que contiene una clave o un valor que no sea String, la llamada fallará.
Desde las claves y valores se supone tanto para ser Cuerdas entonces por qué no hacer cumplir esa forma estática utilizando el tipo genérico adecuado?
Supongo que hacer Properties
implementar Map<String,String>
no sería totalmente compatible con el código escrito para pre-Java 5. Si tiene un código anterior que adhiere cadenas a un objeto de Propiedades, ese código ya no compilaría con Java 5. Pero ... ¿no es eso algo bueno? ¿No es el objetivo de los genéricos detectar estos tipos de errores en tiempo de compilación?
En realidad Map x = new Properties() funciona de cualquier manera. Su gente pone cosas como properties.put ("flag", boolean.TRUE); He visto personas poner todo tipo de datos en un objeto de Propiedades, pero nunca una clave que no sea de Cadena. ;) –
He actualizado mi respuesta para que quede más claro, gracias. –
¡Espera un minuto! Mapa x = nuevas Propiedades() no es legal antes de Java 5, la sintaxis se introdujo en Java 5. Por lo tanto, la declaración "código previamente válido" es incorrecta. –