2011-11-02 13 views
23

Jestem nowym programistą Java. Oto mój kod:jak uzyskać adnotację parametru w 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) 

Chcę uzyskać wszystkie adnotacje w pliku. Niektóre pola są opatrzone przypisami, a niektóre nie.

Wiem, jak korzystać z funkcji method.getParameterAnnotations(), ale po prostu zwraca trzy adnotacje.

Nie wiem, jak im odpowiadać.

się spodziewać się następujące wyniki:

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") 

Odpowiedz

35

getParameterAnnotations powraca jeden układ za parametr przy użyciu pustą tablicę dla każdego parametru, który nie ma żadnych opisów. Na przykład:

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(); 
     } 
    } 
} 

To daje wynik:

0 annotatations 
1 annotatations 

To pokazuje, że pierwszy parametr nie ma adnotacji, a drugi parametr ma jeden adnotacji. (Samo adnotacja będzie oczywiście w drugiej tablicy).

To wygląda dokładnie tak, jak chcesz, więc jestem zdezorientowany twoim twierdzeniem, że getParameterAnnotations "zwraca tylko 3 adnotacje" - zwróci tablicę tablice. Być może w jakiś sposób spłaszczasz zwróconą tablicę?

Powiązane problemy