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?
Respuesta
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.
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.
- 1. ¿Por qué JavaScript devuelve [Object Object] de valueOf() en lugar de [object]?
- 2. ¿Por qué GetCustomAttributes devuelve object [] en lugar de Attribute []?
- 3. ¿Por qué ICustomAttributeProvider.GetCustomAttributes() devuelve object [] en lugar de Attribute []?
- 4. ¿Por qué Java BigDecimal devuelve 1E + 1?
- 5. ¿Por qué is_array() devuelve falso?
- 6. Por qué java.util.Properties implementa Map <Object, Object> y no Map <String, String>
- 7. ¿Por qué {} + [] devuelve 0 en Javascript?
- 8. En Ruby, ¿por qué nil.id devuelve 4?
- 9. ¿Qué significa [object Object]?
- 10. Collections.emptyList() devuelve una lista <Object>?
- 11. por qué Files.probeContentType devuelve nulo
- 12. ¿Por qué Bitmap.getConfig() devuelve nulo?
- 13. Object Literals en Java
- 14. ¿Por qué java -version devuelve una versión anterior?
- 15. ¿Qué significa [object Object]? (JavaScript)
- 16. ¿Por qué lanzar nulo a Object?
- 17. ¿Por qué System.getProperty ("line.seperator") devuelve nulo?
- 18. ¿Por qué ISNUMERIC ('.') Devuelve 1?
- 19. ¿Por qué SelectSingleNode devuelve nulo?
- 20. setProperty debe ser reemplazado por todas las subclases de SOAPMessage
- 21. ¿Por qué GetCurrentProcess devuelve -1?
- 22. ¿Por qué navigator.appCodeName devuelve Mozilla?
- 23. ¿Por qué BitmapFactory.decodeByteArray devuelve nulo?
- 24. ¿Por qué sys.getrefcount() devuelve 2?
- 25. ¿Por qué document.GetElementById devuelve nulo
- 26. ¿Por qué chrome.extension.getBackgroundPage() devuelve nulo?
- 27. ¿Por qué IndexOf devuelve -1?
- 28. ¿Por qué scipy.io.wavfile.read no devuelve una tupla?
- 29. Object [] a la Clase [] en Java
- 30. jQuery llamada Ajax que devuelve '[object XMLDocument]'
si mira el javadoc descubrirá que simplemente devuelve el valor que está configurando. –
¿Porque es un HashMap mal disimulado? –
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