J'ai des méthodes avec un seul paramètre de type Event<Something>
et besoin d'extraire le Something
ou son type brut. Il peut ressembler àComment obtenir l'argument du type de paramètre de la méthode formelle?
void method1(Event<MyEnum1> event) {}
<E extends Enum<E>> method2(Event<E> event) {}
<K, V> method3(Event<Map<K, V>> event) {}
et je voudrais un mappage de fonction
method1 -> MyEnum.class
method2 -> Enum.class
method3 -> Map.class
Pour method1
, il utilise (ParameterizedType) method.getGenericParameterTypes()
facile. Pour method2
, je peux utiliser Goyave
TypeToken.of(method.getDeclaringClass())
.method(method)
.getTypeParameters()[0]
.getBounds()
pour obtenir un Type
et
TypeToken.of(method.getDeclaringClass())
.method(method)
.getParameters()
.get(0)
pour obtenir le Parameter
. Je suppose, je dois résoudre le Parameter
en utilisant le Type
, mais je suis coincé ici.
Je me fous de la method3
, mais il serait bon de savoir d'une manière générale. Je ne me soucie pas du type de paramètres réels (je suis conscient de l'effacement).
Il peut être intéressant pour quelqu'un de savoir pourquoi j'échoué. Comme le montre la réponse acceptée, c'est en fait simple. Mon problème était que j'ai découvert que 'typeArgument' est' TypeVariableImpl', l'a ouvert dans Eclipse et vu qu'il est privé et n'implémente aucune interface (ce qui est impossible car c'est un 'Type', mais je l'ai manqué). La classe correspondante était 'sun.reflect.generics.reflectiveObjects.TypeVariableImpl' (manquante dans sources.jar) et non celle que je regardais. – maaartinus