Ответ 1
getParameterAnnotations
возвращает один массив для каждого параметра, используя пустой массив для любого параметра, у которого нет аннотаций. Например:
import java.lang.annotation.*;
import java.lang.reflect.*;
@Retention(RetentionPolicy.RUNTIME)
@interface TestMapping {
}
public class Test {
public void testMethod(String noAnnotation,
@TestMapping String withAnnotation)
{
}
public static void main(String[] args) throws Exception {
Method method = Test.class.getDeclaredMethod
("testMethod", String.class, String.class);
Annotation[][] annotations = method.getParameterAnnotations();
for (Annotation[] ann : annotations) {
System.out.printf("%d annotatations", ann.length);
System.out.println();
}
}
}
Это дает результат:
0 annotatations
1 annotatations
Это показывает, что первый параметр не имеет аннотаций, а второй параметр имеет одну аннотацию. (Конечно, сама аннотация будет во втором массиве, конечно.)
Это похоже на то, что вы хотите, поэтому я смущен вашей заявкой, что getParameterAnnotations
"возвращает только три аннотации" - он вернет массив массивов. Возможно, вы каким-то образом сгладили возвращаемый массив?