#java #reflection #annotations
#java #отражение #аннотации
Вопрос:
Я начинающий программист на Java. Ниже приведен мой код:
public void testSimple1(String lotteryName,
int useFrequence,
Date validityBegin,
Date validityEnd,
LotteryPasswdEnum lotteryPasswd,
LotteryExamineEnum lotteryExamine,
LotteryCarriageEnum lotteryCarriage,
@TestMapping(key = "id", csvFile = "lottyScope.csv") xxxxxxxx lotteryScope,
@TestMapping(key = "id", csvFile = "lotteryUseCondition.csv") xxxxxxxx lotteryUseCondition,
@TestMapping(key = "id", csvFile = "lotteryFee.csv") xxxxxxxx lotteryFee)
Я хочу получить все аннотации к файлу. Некоторые поля снабжены комментариями, а некоторые — нет.
Я знаю, как использовать method.getParameterAnnotations()
функцию, но она просто возвращает три аннотации.
Я не знаю, как им соответствовать.
Я ожидаю следующего результата:
lotteryName - none
useFrequence- none
validityBegin -none
validityEnd -none
lotteryPasswd -none
lotteryExamine-none
lotteryCarriage-none
lotteryScope - @TestMapping(key = "id", csvFile = "lottyScope.csv")
lotteryUseCondition - @TestMapping(key = "id", csvFile = "lotteryUseCondition.csv")
lotteryFee - @TestMapping(key = "id", csvFile = "lotteryFee.csv")
Ответ №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
«возвращает только 3 аннотации» — оно вернет массив массивов. Возможно, вы каким-то образом сглаживаете возвращаемый массив?