Pregunta Genéricos de Java: establece la Lista de superclase usando la Lista de la subclase


Si tengo un método en MyClass como

setSuperClassList(List<Superclass>)

... debería ser capaz de hacer esto:

new MyClass().setSuperClassList(new ArrayList<Subclass>())

Parece que esto no compilará. ¿Por qué?


7
2018-03-24 20:22


origen


Respuestas:


Tratar setSuperClassList(List<? extends Superclass>).

También verifica PECS para ver si deberías usar ? extends o ? super.


20
2018-03-24 20:24



Usted está simplemente haciendo genéricos un poco mal. Añade el ? extends poco, y eso permitirá que la lista pasada contenga la Superclase o cualquiera de sus subclases.

setSuperClassList(List<? extends Superclass>)

Esto se llama establecer un límite superior en los genéricos.

La declaración List<Superclass> dice que la Lista solo puede contener SuperClass. Esto excluye cualquier subclase.


5
2018-03-24 20:24



No compilará desdejava.util.List no es covariante.

Tratar setSuperClassList(List<? extends Superclass>) en lugar.


1
2018-03-24 20:24



Hacer:

setSuperClassList(List<? extends Superclass> list)

Esto permitirá una lista de cualquier subclase de Superclase.


0
2018-03-24 20:26