2011-11-02 13 views
23

Sono un nuovo programmatore Java. Segue il mio codice:come ottenere l'annotazione del parametro in 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) 

Desidero ottenere tutte le annotazioni archiviate. Alcuni campi sono annotati e altri no.

So come utilizzare la funzione method.getParameterAnnotations(), ma restituisce solo tre annotazioni.

Non so come corrisponderli.

mi aspetto il seguente risultato:

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

risposta

35

getParameterAnnotations restituisce un array per parametro, utilizzando un array vuoto per ogni parametro che non ha alcuna annotazioni. Ad esempio:

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

Questo dà uscita:

0 annotatations 
1 annotatations 

Ciò mostra che il primo parametro non ha annotazioni, e il secondo parametro ha un'annotazione. (L'annotazione stessa sarebbe nel secondo array, ovviamente.)

Sembra esattamente quello che vuoi, quindi sono confuso dalla tua affermazione che "restituisce solo 3 annotazioni" - restituirà una matrice di array. Forse stai in qualche modo appiattendo l'array restituito?

Problemi correlati