Verschachtelte Annotationen

xm22

Mitglied
Hallo,

gibt es die Möglichkeit, "Bedingungs-Annotationen" zu verschachteln? Also so was wie "Wenn Annotation A nicht greift, _dann_ prüfe auf Annotation B"?
 
Wie soll eine Annotation "nicht greifen"? Eine Annotation ist entweder da oder nicht da, aber sie tut nichts. Höchstenst arbeiten verschiedene Frameworks abhängig von diesen vorhandenen oder nicht vorhandenen Annotationen.

Die einzigen Annotationen, die aktiv etwas Bewirken sind die vom JDK, die das verhalten des Kompilers beeinflussen (SupressWarnings,Override,SafeVarargs)
 
Z. B. ein Attribut einer Klasse kann null sein _oder_ muss eine andere Annotation erfüllen. Bsp.: Das Updaten einer Entity:
Es gibt ein Attribut vom Typ UUID (Dafür habe ich eine Annotation). Nun soll dieses Attribut null oder eine UUID sein können. Quasi so was wie @NULL OR @ValidUUID
 
Dann macht (in Java 7) die Annotation aber immer nocht nichts. In Java 8 sollen solche Annotationen wie @NotNull oder @Nullable enthalten sein, aber im Moment, braucht es afaik ein Framework, das die Einhaltung der Annotationen überwacht, damit diese Annotation was bewirkt.
 
Die Annotation selber soll ja auch nichts machen. Die Frage war einzi und allein, ob es in Java eine Syntax gibt, mit der anhand von Fallunterscheidungen selektiv Annotationen beachtet werden.
 
Ich denke nicht. Ich spreche von Annotationen, die zum Validieren verwendet werden, z. B. @NotNull, @NotEmpty, etc. Diese verweisen ja letzten Endes auf einen Validator, der true oder false zurück gibt. Ich habe jetzt eine eigene Annotation + Validator implementiert, der prüft, ob der annotierte Wert (String) eine valide UUID ist. Das soll er aber natürlich nur machen, wenn der Wert auch gesetzt wurde, da er optional ist.

Diese Unterscheidung könnte ich natürlich auch in meinen Validator einbauen, aber der soll so generisch wie möglich sein. Aber mir ist gerade eingefallen, dass ich die Annotation mit einem boolschen nullable-Parameter versehen könnte..
 
Schau Dir mal den Quellcode der Validatoren für die Standardannotationen (z.B. @Size, @Pattern...) an. Die müssen auch damit umgehen, dass sie einen eventuell optionalen Wert validieren müssen. Die lösen es mit einer Zeile am Anfang validate-Methode:
Java:
if(valueToValidate == null) return true;
// heißt natürlich nicht immer valueToValidate
Erst danach kommt der eigentliche Validierungscode. So würde ich es auch machen.

Und zu Deinem speziellen Fall einer UUID-Validierung: Da würde ich keinen eigenen Validator für schreiben, sondern @Pattern benutzen.
 

Zurück
Oben