Vous n'avez pas besoin de trouver un des types d'arguments de la méthode ou le type de retour pour identifier si les paramètres de type a, parce que la classe Method
a une méthode getTypeParameters
retourne un tableau des paramètres de type.
Voici un exemple montrant l'utilisation de cette méthode. J'ai également montré l'utilisation de 2 autres méthodes ici, car la terminologie est incroyablement confuse.
public class SomeClass {
<V, U> Queue<V> someMethod(String str, int a, List<U> list) {
return null;
}
public static void main(String[] args) throws Exception {
Method method = SomeClass.class.getDeclaredMethod("someMethod", String.class, int.class, List.class);
TypeVariable<Method>[] typeParameters = method.getTypeParameters();
System.out.println(typeParameters.length); // Prints "2"
System.out.println(typeParameters[0].getName()); // Prints "V"
Class<?>[] parameterTypes = method.getParameterTypes();
System.out.println(Arrays.toString(parameterTypes)); // Prints [class java.lang.String, int, interface java.util.List]
Type[] genericParameterTypes = method.getGenericParameterTypes();
System.out.println(genericParameterTypes[2].getTypeName()); // Prints java.util.List<U>
}
}
En raison de l'effacement de type vous ne pouvez pas. Et rappelez-vous qu'il existe une seule classe - contrairement aux modèles C++ -, alors pour quoi <> votre réflexion devrait-elle fonctionner? –
J'essaie d'obtenir les méta-données de la classe/méthode. Je ne regarde pas une utilisation particulière de la classe/méthode. Je suppose que l'effacement ne s'applique qu'à l'utilisation de génériques. –