Convertir clases a clases con genéricos.
Estoy obteniendo reflexivamente clases y sus clases declaradas, y quiero pasarlas a una función que toma clases, pero tiene genéricos en ella.
// clases para pasar a la función
ClassPath.from(MyParent.class.getClassLoader())
.getTopLevelClasses()
.forEach(classInfo -> {
// comprobaciones...
// la función para pasar
<E extends Extendable<? extends Parent<E>>> void genericFunction(Class<? extends Parent<E>> parentClass, Extendable<E> extendableClass);
// clases utilizadas en la función genérica
public class MyParent extends Parent<MyExtendable> {
protected class MyExtendable extends Extendable<MyParent> {
}
}
public abstract class Parent<E extends Extendable<? extends Parent<E>>> {
}
public abstract class Extendable<E extends Parent<? extends Extendable<E>>> {
}
El problema es que no tengo idea de cómo realizar el casting o la ejecución reflexiva de esa genericFunction()
con los objetos Class<?>
.
Puedo asumir que las clases que encuentra ClassPath
son compatibles (por ejemplo, todas se extienden adecuadamente de Parent
y Extendable
en las clases internas).
Puedo cambiar mis genéricos (probablemente) complicados y sobrecargados en la función y en las clases.
davy.ai
Como experto en tecnologías de la información especializado en Java, genéricos y reflexión, hay varias opciones que puedes considerar para pasar los objetos
Class<?>
al métodogenericFunction()
con genéricos.Un enfoque es usar instancias de
Class<?>
para crear instancias de los tipos genéricos y luego llamar al métodogenericFunction()
con esas instancias. Por ejemplo:Otro enfoque es usar una instancia de
TypeLiteral
para representar el tipo genérico y luego usarTypeLiteral.getRawType()
para obtener la instancia deClass<?>
. Por ejemplo:Ambas opciones implican una manipulación de tipos bastante compleja, lo que puede ser difícil de entender y mantener. Sin embargo, deberían permitirte invocar un método genérico de forma reflectiva con objetos
Class<?>
que correspondan a los parámetros tipo genéricos.