Dans mon code a ont les superclasse abstraites suivantUtiliser un type générique d'une sous-classe dans sa superclasse abstraite?
public abstract class AbstractClass<Type extends A> {...}
et certaines classes d'enfants comme
public class ChildClassA extends AbstractClass<GenericTypeA> {...}
public class ChildClassB extends AbstractClass<GenericTypeB> {...}
Je cherche une façon élégante comment je peux utiliser le type générique des classes d'enfants (GenericTypeA, GenericTypeB, ...) dans la classe abstraite de manière générique.
Pour résoudre ce problème, je actuellement défini la méthode
protected abstract Class<Type> getGenericTypeClass();
dans ma classe abstraite et mis en œuvre la méthode
@Override
protected Class<GenericType> getGenericTypeClass() {
return GenericType.class;
}
dans toutes les classes d'enfants.
Est-il possible d'obtenir le type générique des classes enfants dans ma classe abstraite sans implémenter cette méthode auxiliaire?
BR,
Markus
Je ne comprends pas ce que le code dans le constructeur de Test fait vraiment, mais cela a fonctionné. Maintenant, je n'ai plus besoin d'utiliser les méthodes d'aide. Merci :-) – Markus
Il utilise la réflexion.Premièrement, il obtient la superclasse générique (java.lang.reflect.Type) de la classe, dans notre cas il ne sera jamais nul et nous savons qu'il s'agit d'un ParameterizedType, donc nous le castons et appelons la méthode getActualTypeArguents qui retourne un tableau de les arguments de type réels, par exemple B, du type. – naikus
Ahhh, merci pour votre explication. – Markus