2012-05-20 17 views
8

La clase Properies en Java SE 6 tiene un método llamado setProperty(String key, String value), que devuelve Object. Además, el Object anterior almacenado para esta clave, o NULL si no existe ninguno. Dado que setProperty(String key, String value) solo puede tomar un valor de String, ¿por qué ese método no devuelve String?¿Por qué setProperty en Java devuelve Object?

+1

si mira el javadoc descubrirá que simplemente devuelve el valor que está configurando. –

+1

¿Porque es un HashMap mal disimulado? –

+0

Este steProperty ha estado disponible desde 1.2: http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#setProperty(java.lang.String, java.lang.String) – Nivas

Respuesta

14

Desafortunadamente, la clase java.util.Properties se introdujo en Java 1.0, muchos años antes de los genéricos. Properties extiende Hashtable que puede almacenar cualquier tipo de datos. Por lo tanto, puede hacer lo siguiente:

Properties props = new Properties(); 
props.put("key", new Object()); // use Hashtable's put method 
props.setProperty("key", "value"); // use Proerties' setProperty method 

En este ejemplo setProperty debe devolver el valor anterior almacenado en esta entrada, es decir Object. ¡Pero no es String! Para evitar ClassCastException, los creadores de JDK tuvieron que definir setProperty() como método que devuelve Object.

BTW incluso ahora la clase Propiedades implementa Map<Object, Object> en lugar de Map<String, String> para compatibilidad con versiones anteriores.

13

Porque las propiedades se malinterpretaron desde el principio al extender Hashtable, que puede almacenar cualquier cosa. Por lo tanto, el diseño no respetó el principio de sustitución de Liskov: todo lo que una clase base puede hacer, una subclase debe ser capaz de hacer.

Dado que Properties extends Hashtable, de hecho puede almacenar cualquier clase de Object en él.

Cuestiones relacionadas