2012-05-24 11 views
6

¿Alguien puede explicar cómo esto puede compilarse y cómo funciona?En los genéricos de Java, ¿qué hace List <? super String> mean?

List<? super String> list = new ArrayList<Object>(); 

Como lo entendía, la aplicación de esta tiene que ser una lista de cuerda o una lista de objetos que tienen String como superclase? ¿Me he perdido algo?

+0

BTW - La clase String es final y ninguna clase la amplía. – MByD

+0

Sí, lo sé, solo un caso que surgió para el examen de certificación java cert =) – Marthin

Respuesta

20

No (es decir, sí, te has perdido algo :-). <? super String> es cualquier clase que es una superclase de String (incluido String sí mismo). (En este caso, la única otra clase adecuada es Object.)

lo que usted describió sería <? extends String> (que en este caso específico no sería muy útil como String es final, por lo que no puede tener subclases).

3

<? super String> acepta String y cualquier superclase.

que no debe confundirse con:

<? extends String> acepta String y cualquier subclase (de los cuales no hay ninguna desde String es final).

0

Dado que String es final, no puede ser la super clase de ninguna otra clase. List<? super String> significa cualquier tipo que sea una superclase de String. De hecho, Object es una súper clase de String (de cualquier clase en realidad).

Cuestiones relacionadas