Wie überprüfe ich, ob ein Parameter der aktuellen Methode eine Annotation hat und diesen Parameterwert in Java abruft?

8

Betrachten Sie diesen Code:

%Vor%

Ich möchte prüfen, ob die Methode eine Annotation @Foo hat und das Argument erhalten oder eine Ausnahme auslösen, wenn keine @Foo Annotation gefunden wird.

Mein aktueller Ansatz besteht darin, zunächst die aktuelle Methode zu erhalten und dann die Parameter-Annotationen zu durchlaufen:

%Vor%

Ist das der richtige Ansatz oder gibt es einen besseren? Wie würde der Code in der Forach-Schleife aussehen? Ich bin mir nicht sicher, ob ich verstanden habe, was getParameterAnnotations tatsächlich zurückgibt ...

    
soc 29.08.2011, 09:54
quelle

3 Antworten

6

Die äußere for-Schleife

%Vor%

sollte einen expliziten Zähler verwenden, sonst wissen Sie nicht, welchen Parameter Sie gerade verarbeiten

%Vor%

Stellen Sie außerdem sicher, dass Ihr Annotationstyp mit @Retention(RetentionPolicy.RUNTIME)

versehen ist

Aus Ihrer Frage ist nicht ganz klar, was Sie zu tun versuchen. Wir sind uns einig über den Unterschied zwischen formalen Parametern und tatsächlichen Argumenten:

%Vor%

wobei x ein Parameter und 3 ein Argument ist?

Es ist nicht möglich, die Argumente von Methoden durch Reflexion zu erhalten. Wenn es überhaupt möglich ist, müssten Sie das sun.unsafe -Paket verwenden. Ich kann Ihnen aber nicht viel erzählen.

    
Cephalopod 29.08.2011, 11:08
quelle
4

getParameterAnnotations gibt ein Array zurück, dessen Länge der Anzahl der Methodenparameter entspricht. Jedes Element in diesem Array enthält ein Array mit Anmerkungen Parameter.
So enthält getParameterAnnotations()[2][0] die erste ( [0] ) Annotation des dritten Parameters ( [2] ).

Wenn Sie nur prüfen müssen, ob mindestens ein Parameter eine Anmerkung eines bestimmten Typs enthält, könnte die Methode wie folgt aussehen:

%Vor%     
Kapep 29.08.2011 11:13
quelle
3

Wenn Sie nach Anmerkungen zur Methode suchen, möchten Sie wahrscheinlich method.getAnnotations() oder method.getDeclaredAnnotations() .

Der Aufruf method.getParameterAnnotations() gibt Ihnen Anmerkungen zu den formalen Parametern der Methode, nicht zu der Methode selbst.

Wenn ich auf den Titel der Frage zurückblicke, vermute ich, dass nach Anmerkungen zu den Parametern sucht, die ich im Inhalt der Frage nicht gelesen habe. Wenn das der Fall ist, sieht Ihr Code gut aus.

Siehe Methode Javadoc und Annotiertes Javadoc-Element .

    
Don Roby 29.08.2011 10:10
quelle