Foros del Web » Programación para mayores de 30 ;) » Java »

Herencia en tipos genéricos

Estas en el tema de Herencia en tipos genéricos en el foro de Java en Foros del Web. Hola, me ha surgido un error de compilación que no entiendo, así que aquí estoy a ver si alguien me aclara el asunto. Intentaré explicarme ...
  #1 (permalink)  
Antiguo 16/05/2009, 10:55
 
Fecha de Ingreso: junio-2004
Mensajes: 43
Antigüedad: 19 años, 11 meses
Puntos: 0
Busqueda Herencia en tipos genéricos

Hola, me ha surgido un error de compilación que no entiendo, así que aquí estoy a ver si alguien me aclara el asunto. Intentaré explicarme lo mejor posible.

Tengo una propiedad Lista donde quiero almacenar elementos de tipo 'Unit'. Existe una jerarquia para esta clase Unit y realmente no quiero almacenar elementos Unit sino elementos de alguna de sus subclases. Así que tengo declarado lo siguiente:
Código:
public abstract class WFUnit extends Unit {
...etc...
}
Código:
public abstract class Manager {
protected List<? extends Unit> armyList = null;
	...etc..
}
Así, el correspondiente manegador inicializará la estructura, tal como:
Código:
public abstract class ManagerWF extends Manager {
public ManagerWF() {
	super();
        armyList = new ArrayList<WFUnit>();
       }

	protected void addUnit(WFUnit u) throws Exception {
		this.armyList.add(u);                        //<=== ERROR!!!!
	}

	protected void removeCurrentUnit() throws Exception {
		WFUnit u = (WFUnit) getUnit();
		this.armyList.remove(u);
	}

Pero el problema me aparece cuando quiero añadir elementos a este ArrayList desde el ManagerWF, tal como está el método addUnit.. El error de compilación es el siguiente:

"The method add(capture#2-of ? extends Unit) in the type List<capture#2-of ? extends Unit> is not applicable for arguments (WFUnit)".

Es curioso porque la línea 'this.armyList.remove(u);' del otro método no me da error de compilación. Yo pienso que mi declaración es correcta pero consiguo averiguar como solucionar el error.

¿Alguna idea? ¿O cúal es mi error?

Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:04.