¿Entender los límites superior e inferior en? en Java Genéricos
Realmente me está costando entender el parámetro de comodín. Tengo algunas preguntas al respecto.
?
como parámetro de tipo solo puede ser usado en métodos. p.ej:printAll(MyList<? extends Serializable>)
No puedo definir clases con?
como parámetro de tipo
Entiendo el límite superior en?
. printAll(MyList<? extends Serializable>)
significa: "printAll
imprimiráMyList
Si tiene objetos que implementan elSerialzable
interfaz."
Tengo un pequeño problema con elsuper
. printAll(MyList<? super MyClass>)
significa: "printAll
imprimiráMyList
si tiene objetos deMyClass
o cualquier clase que se extiendaMyClass
(los descendientes deMyClass
)."
Corrígeme donde me equivoqué.
En fin, soloT
oE
oK
oV
oN
Se pueden usar como parámetros de tipo para definir clases genéricas.?
Solo se puede utilizar en métodos.
public void printAll(MyList<? super MyClass>){
// code code code
}
De acuerdo con el libro de Ivor Horton,MyList<? super MyClass>
significa que puedo imprimirMyList
si tiene objetos deMyClass
o cualquiera de las interfaces o clases que implementa. Es decir,MyClass
es unlímite inferior. Es la última clase en la jerarquía de herencia. Esto significa que mi suposición inicial era errónea.
Entonces, di siMyClass
parece:
public class MyClass extends Thread implements ActionListener{
// whatever
}
entonces,printAll()
se imprimirá si
1. hay objetos deMyClass
en la lista
2. Hay objetos deThread
oActionListener
en elList
Entonces, después de haber leído las muchas respuestas a la pregunta, aquí está mi entendimiento:
? extends T
mediocualquier clase que se extiendaT
. Así, nos referimos a laniños deT
. Por lo tanto,T
es el límite superior. La clase más alta en la jerarquía de herencia.
? super T
mediocualquier clase / interfaz que seasuper
deT
. Así nos referimos a todos lospadres deT
. T
Es así el límite inferior. La clase más baja en la jerarquía de herencia.