Die JavaDude Libs gehen allerdings einen gänzlich anderen Weg. Siehe das Beispiel auf deren Seite:
http://code.google.com/p/javadude/wiki/A…ropertyExample1
Im Prinzip wird da alles bereits vor dem Kompilieren automatisch zu fertigen Klassen zusammengebaut. Die Annotationen dienen quasi als Bauplan. Am Ende kommen also ganz normale Klassen raus, die kaum noch Spuren enthalten, aus was sie eigentlich entstanden. Ich hingegen werte die Infos erst zur Laufzeit aus. Solche Sachen zur Laufzeit zu machen ist zwar schwieriger zu handhaben, wird aber insgesamt der
Objektorientierung besser gerecht, also dem Fokus auf der Dynamik von Objekten und ihrem Verhalten zur Laufzeit, statt auf dem statischen Klassenmodell mit seinen starren Beziehungen.
AFAIK ist nichts derartiges in der Standard-API von Java. Die Annotationen kann man sich aber relativ leicht selbst bauen:
Default.java
|
Java Quellcode
|
1
2
3
4
5
|
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Default {
String value();
}
|
Die Auswertung von Annotationen zur Laufzeit ist mit ein paar Umwegen verbunden. Man muss sich quasi von der Klasse, über die Methode, den ersten Parameter bis zur ersten dortigen Annotation hangeln. Wenn man es aber einmal verstanden hat, ist das Ganze absolut logisch. Außerdem kann man solche Sachen in Helper-Klassen auslagern, was die Auswertung der Annotation zum EInzeiler macht. Aber zum Verständnis hier der lange Weg:
|
Java Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class Hello {
public void sayHi(@Default("Horst") String name) {
if (name == null) {
try {
Method thisMethod = this.getClass().getMethod("sayHi", String.class);
Annotation[][] annotations = thisMethod.getParameterAnnotations();
Default annotation = (Default) annotations[0][0];
System.out.println("Hallo " + annotation.value() + "!");
} catch (Exception e) {
}
} else {
System.out.println("Hallo " + name + "!");
}
}
}
|
Benutzung ganz normal:
|
Java Quellcode
|
1
2
3
4
5
|
public static void main(String[] args) {
Hello h = new Hello();
h.sayHi("Kevin");
h.sayHi(null);
}
|
|
Source code
|
1
2
|
Hallo Kevin!
Hallo Horst!
|