Una instancia de HashMap<String, String>
partidos Map<String, ?>
pero no Map<String, Object>
. Digamos que quiere escribir un método que acepta mapas de String
s a cualquier cosa: Si usted escribiría
public void foobar(Map<String, Object> ms) {
...
}
no se puede suministrar una HashMap<String, String>
. Si escribe
public void foobar(Map<String, ?> ms) {
...
}
¡funciona!
Una cosa a veces mal entendida en los genéricos de Java es que List<String>
no es un subtipo de List<Object>
. (Pero String[]
es de hecho un subtipo de Object[]
, esa es una de las razones por las que genéricos y matrices no se combinan bien (los arreglos en Java son covariantes, los genéricos no, son invariantes)).
muestra: Si desea escribir un método que acepta List
s de InputStream
s y subtipos de InputStream
, que iba a escribir
public void foobar(List<? extends InputStream> ms) {
...
}
Por cierto: Joshua Bloch's Effective Java es un excelente recurso cuando Me gustaría entender las cosas no tan simples en Java. (Su pregunta anterior también está muy bien cubierta en el libro.)
Consulte el tutorial oficial sobre [Comodines] (http://java.sun.com/docs/books/tutorial/extra/generics/wildcards.html). Lo explica bien y da un ejemplo de por qué es necesario sobre simplemente usar Object. –