Eche un vistazo a estas tres clases. Minatchi se permite extenderse para que también se pueda extender el tipo de devolución de sus métodos. Para ilustrar, utilicé un método estático.genéricos de Java que extienden el tipo de retorno de los métodos
public class Minatchi<T extends Minatchi<?>>{
static public <T extends Minatchi<?>>
List<T> listAll(){
return
(List<T>) query();
}
}
Y por lo que subclase Minatchi en Señora
public class Lady
extends Minatchi<Lady>{
}
Aquí es donde el comportamiento cuestionable lleva a cabo.
public class HelloMinatchi{
private void listA(){
List<Lady> uvs = Lady.listAll();
for (Lady uv: uvs){
logger.info(uv.getName());
}
}
private void listB(){
for (Lady uv: Lady.listAll()){
logger.info(uv.getName());
}
}
}
Los métodos listA y listB son esencialmente los mismos. listA coloca la lista en una variable intermedia uvs, mientras que listB coloca directamente listAll en el encabezado for-loop.
Sin embargo, para listB, el compilador se queja No se puede convertir Minatchi <?> En Lady.
Así que esta pregunta es sobre la integridad del diseño de los genéricos de Java. Sin embargo, otra queja de genéricos.
Se trata de una función deliberada de diseño o una falla de diseño involuntaria que los diseñadores de genéricos de Java no sabían cómo resolver. Si deliberadamente, ¿por qué hicieron eso? Si es un error, ¿están planeando resolverlo?
¿O es este mi problema personal que no conozco una mejor manera de declarar los genéricos? Si es así, dime cómo.
(he usado una clase genérica Minatchi porque he métodos no estáticos de estar expuestos a la extensión de clase también, que me he dejado en la pregunta.)
Utilicé una clase Minatchi genérica porque tengo métodos no estáticos para exponer también a la extensión de clase, que dejé en el pregunta. –