Retrouver un constructeur d'une classe prenant un Generic comme paramètre
Bonjour,
J'ai une méthode
Code:
1 2 3
| private itMessageDisplayer<T> createDisplayer(Class<? extends itMessageDisplayer<T>> DisplayerClass,
T message)
Qui doit créer un un objet de type Class<? extends itMessageDisplayer<T>> |
Cet objet a un constructeur ayant cette forme:
Code:
1 2
| public static class DefaultNonEditableDisplayer<M> extends JLabel implements itMessageDisplayer<M> {
public DefaultNonEditableDisplayer(clComboMessage<M> combo, M message) { |
Donc j'écris:
Code:
1 2 3 4 5 6
| private itMessageDisplayer<T> createDisplayer(Class<? extends itMessageDisplayer<T>> DisplayerClass, T message) throws ...
// On crée le Displayer
itMessageDisplayer<T> d = null;
java.lang.reflect.Constructor<? extends itMessageDisplayer<T>> c =
DisplayerClass.getConstructor(clComboMessage.class, T.class);
d = c.newInstance((clComboMessage<T>)this, message); |
Le problème c'est le T.class. Ca ne marche pas.
Est-ce possible d'écrire quelque chose de ce genre ?
J'ai lu dans un autre forum que la suggestion était de remplacer le T.class par une classe plus concrète. Mais pour T, il n'y a aucune restriction sur ce qu'il peut être, donc je devrais remplacer T.class par
Code:
1 2
| java.lang.reflect.Constructor<? extends itMessageDisplayer<T>> c =
DisplayerClass.getConstructor(clComboMessage.class, Object.class); |
J'ai aussi pensé à écrire à la place de T.class
Code:
1 2
| java.lang.reflect.Constructor<? extends itMessageDisplayer<T>> c =
DisplayerClass.getConstructor(clComboMessage.class, message.getClass()); |
Mais si message est d'une sous-classe de T, est-ce que mon constructeur va être trouvé ?
Donc me voilà encore une nouvelle fois un peu perdu avec les génériques :oops:
Merci pour vos suggestions de solutions,
Laurent