Внешний для петли
for (Annotation[] annotations : paramAnnotations) {
...
}
следует использовать явный счетчик, иначе вы не знаете, какой параметр вы сейчас обрабатываете
final Annotation[][] paramAnnotations = method.getParameterAnnotations();
final Class[] paramTypes = method.getParameterTypes();
for (int i = 0; i < paramAnnotations.length; i++) {
for (Annotation a: paramAnnotations[i]) {
if (a instanceof Foo) {
System.out.println(String.format("parameter %d with type %s is annotated with @Foo", i, paramTypes[i]);
}
}
}
Также убедитесь, что ваш тип аннотации помечен @Retention(RetentionPolicy.RUNTIME)
Из вашего вопроса не совсем понятно, что вы пытаетесь сделать. Мы согласны на разницу формальных параметров и фактических аргументов:
void foo(int x) { }
{ foo(3); }
где x
- параметр, а 3
- аргумент?
Невозможно получить аргументы методов через отражение. Если это вообще возможно, вам придется использовать пакет sun.unsafe
. Я не могу вам много рассказать об этом.