Dentro de mi código A tienen el siguiente superclase abstracta¿Usando un tipo genérico de una subclase dentro de su superclase abstracta?
public abstract class AbstractClass<Type extends A> {...}
y algunas clases hijas como
public class ChildClassA extends AbstractClass<GenericTypeA> {...}
public class ChildClassB extends AbstractClass<GenericTypeB> {...}
Estoy buscando una manera elegante cómo puedo usar el tipo genérico de las clases hijas (GenericTypeA, GenericTypeB, ...) dentro de la clase abstracta de una manera genérica.
Para resolver este problema actualmente he definido el método
protected abstract Class<Type> getGenericTypeClass();
en mi clase abstracta e implementado el método
@Override
protected Class<GenericType> getGenericTypeClass() {
return GenericType.class;
}
en cada clase de niños.
¿Es posible obtener el tipo genérico de las clases secundarias en mi clase abstracta sin implementar este método de ayuda?
BR,
Markus
No entiendo lo que hace realmente el código en el constructor de Test, pero funcionó. Ahora no tengo que usar los métodos de ayuda por más tiempo. Gracias :-) – Markus
Utiliza la reflexión.Primero obtiene la superclase genérica (java.lang.reflect.Type) de la clase, en nuestro caso nunca será nula y sabemos que es un ParameterizedType, por lo que lo lanzamos y llamamos al método getActualTypeArguents que devuelve una matriz de los argumentos de tipo real, por ejemplo, B, del tipo. – naikus
Ahhh, gracias por tu explicación. – Markus