Genéricos - No coinciden los tipos en la prestación de un tipo concreto de una clase genérica

StackOverflow https://stackoverflow.com/questions/3873862

Pregunta

Simple Java genéricos pregunta:. Tengo dos clases - una de las cuales utiliza los genéricos para definir su tipo, la otra que se extiende esta clase que proporciona un tipo concreto

public class Box<Item> {
    ...
}


public class Toolbox extends Box<Tool>{
    ...
}

Dado que se extiende Caja de herramientas Caja de proporcionar una herramienta como el tipo real para el marcador de posición genérica, yo habría pensado que debería ser posible hacer algo como esto:

Box<Tool> box = new Box();

Toolbox toolbox = box; 

Sin embargo, parece que esto causa un tipo de desajuste. ¿Por qué es esto?

¿Fue útil?

Solución

Box<Item> es el tipo genérico no unido. Box<Tool> es una versión unida particular de ese mismo tipo genérico. Toolbox es una subclase de Box<Tool> y por lo tanto es un tipo discreto de Box<Tool>.

Otros consejos

En realidad no es un problema de los genéricos. Su problema es que se está asignando un objeto de un tipo menos específica a una variable de un tipo más específico.

tendría el mismo problema si se trató de asignar un objeto a una variable de cadena, a pesar de cadena se extiende objeto.

Sin embargo, debería ser capaz de escribir Box<Tool> box = new Toolbox(); con la estructura de clase dada. Simplemente no al revés.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top