Как получить аннотацию параметра в Java? - PullRequest
25 голосов
/ 02 ноября 2011

Я новый программист на 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 Ответ

38 голосов
/ 02 ноября 2011

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 аннотации" - он вернет массив массивов. Возможно, вы как-то сглаживаете возвращенный массив?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...