2011-07-21 21 views
6

¿Qué significa Map<?, ?> en Java?
He buscado en línea pero no puedo encontrar ningún artículo sobre él.¿Qué significa Map <?, ?> en Java?

editar: He encontrado esto en MP3 Duration Java

+3

'Map' as in the _collection_? o la parte '', como en _generics_? ¿Has mirado el javadoc? – c00kiemon5ter

+0

bien, yo definitivamente estoy hablando de genéricos y comodines. La parte '<' estaba oculta en la pregunta; interpretado como html. Edité la pregunta. – c00kiemon5ter

+0

@ C00k - es posible que desee volver a editar la pregunta, el '' no se muestra. – Paul

Respuesta

3

? indica un marcador de posición en cuyo valor no está interesado en (comodín):

HashMap<?, ?> foo = new HashMap<Integer, String>(); 

Y puesto ? es un comodín, puede evitarlo y todavía obtener el mismo resultado:

HashMap foo = new HashMap<Integer, String>(); 

Pero se pueden usar para especificar o subconjuntar los genéricos que se utilizarán. En este ejemplo, el primer genérico debe implementar la interfaz Serializable.

// would fail because HttpServletRequest does not implement Serializable 
HashMap<? extends Serializable, ?> foo = new HashMap<HttpServletRequest, String>(); 

Pero siempre es mejor usar clases concretas en lugar de estos comodines. Solo debe usar ? si sabe lo que está haciendo :)

+3

¡El tipo Raw no es el mismo resultado que un comodín! ¡De ningún modo! – Affe

+0

¿De verdad? Yo no sabía eso. ¿Cómo difieren estos dos primeros casos el uno del otro? – mana

+3

El comodín significa 'Este es un mapa que tiene algún tipo específico de cosa restringida, pero no sé lo que es'. El tipo sin procesar es solo el tipo sin procesar, no se conoce nada, no hay restricciones, puede haber algo allí. El compilador no le permitirá agregar elementos a un Mapa , pero puede colocar lo que desee en un Mapa sin formato. – Affe

10

Map<?,?> significa que en tiempo de compilación, que no sabe qué tipo de clase del objeto clave y el valor del mapa va a ser.

Es un tipo de comodín. http://download.oracle.com/javase/tutorial/extra/generics/wildcards.html

+0

Disculpe, no soy tan bueno con los genéricos, pero ¿cuáles son las diferencias entre 'Map ' y 'Map '? –

+1

'ClassName ' es lo que escribiría para "definir" una clase o interfaz. 'ClassName ' es lo que escribirías para "usar" la clase genérica en tu programa con un tipo desconocido (cualquiera). – Kainsin

1

Desde Java5, Generics se proporcionan con el lenguaje. http://download.oracle.com/javase/tutorial/java/generics/index.html

La notación significa que el Mapa que está creando aceptará un objeto de clase A como clave y un objeto de clase B como valor.

Esto lo ayuda como desarrollador para que no pueda lanzar más objetos a la clase correcta. Por lo que no será capaz de utilizar el mapa con claves distintas de A y objetos que no sean B. Evitar los moldes feas y proporcionando compilar las limitaciones de tiempo

1

Map<?,?> le dice que usted puede utilizar cada objeto para key y value en su mapa.

Pero por lo general es más útil el uso de los genéricos así:

Map<String, YourCustomObject> map 

Así que en este mapa, sólo put un String como clave y como YourCustomObject valor puede.

Ver esto tutorial en genéricos.

0

¿El? es el comodín en genéricos. Sun ... er ... Oracle tiene un buen tutorial sobre genéricos here. Hay una sección separada sobre comodines.

Probablemente obtendrías una mejor respuesta si publicaras más contexto para tu pregunta, como dónde viste Map<?, ?>.