Genéricos - No coinciden los tipos en la prestación de un tipo concreto de una clase genérica
-
28-09-2019 - |
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?
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.