2012-07-09 25 views
23

Duplicar posibles:
What does List<?> mean in java generics?
What does the question mark in Java generics' type parameter mean?Genéricos ¿Qué significa realmente <?>?

Disculpas, pero era difícil tratar de buscar <?>.

¿Qué significa en cuanto a los genéricos de Java? Entiendo <A extends B> y <A super B>, pero nunca antes había visto este signo de interrogación.

+0

Intente buscar con "Símbolo sabueso" - http: //www.symbolhound.com/ –

+0

no hay '' – newacct

Respuesta

35

<?> es una abreviatura de <? extends Object>, también se le conoce como un comodín sin límites. Entonces puedes especificar cualquier tipo de objeto en tu genérico.

Por ejemplo, la clase List se declara como List<?>, porque puede ser una lista de lo que desee.


Recursos:

+0

en todo caso? entonces ¿por qué estás usando genérico? No creo que sea una buena respuesta para hacer la diferencia. Porque '' también le permitirá especificar cualquier tipo de objeto. – UnKnown

8

Sus un tipo wildcard. Es la abreviatura de ? extends Object

Si la obtiene, todo lo que sabe es que es Object. Si intentas establecer, no puedes porque podría ser cualquier subclase de Object.

+5

¿Cuál es la diferencia entre 'Clase ' y 'Clase'? ¿Por qué alguna vez necesitaría usar 'Clase ' en lugar de 'Clase'? – ycomp

+1

@ycomp un tipo sin formato tiene genérico apagado. Por ejemplo. Mapa del mapa; map.entrySet() es un conjunto simple, no un 'Set ' mientras que usa 'Map ' y usted entrySet es un 'Set ' ' –

+0

¿Por qué no usar Object en ese caso? ¿Cuál es la ventaja de usar genéricos? – Davor

3

Es un comodín. Supongamos que tiene una colección, pero se desconoce el tipo de esa colección, por lo que la denota con "?". Simplemente especifica que el tipo no se conoce. Para obtener más información, consulte http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf Estoy seguro de que será de ayuda.

3

El comodín genérico es "algo". Se manejará como algo que se extiende desde Object.

De Java documentation: (?)

En código genérico, el signo de interrogación, llamado el comodín, representa un tipo desconocido. El comodín se puede utilizar en una variedad de situaciones : como el tipo de un parámetro, campo o variable local; a veces como un tipo de devolución (aunque es mejor práctica de programación para ser más específico). El comodín nunca se usa como un argumento de tipo para una invocación de método genérico, una creación de instancia de clase genérica o un supertipo.

Así, por ejemplo, un List<?> es una lista que contiene objetos de tipo desconocido.

Cuestiones relacionadas