4 Eigene Annotationen

Natürlich lassen sich auch eigene Annotationen schreiben, will man z.B. Methoden oder Klassen als „unfertig“ kennzeichnen, so kann man das in einem JavaDoc Kommentar tun. Allerdings wäre es schwierig alle diese unfertigen Programmteile wieder zu finden, da Kommentare keinem Standard entsprechen. An dieser Stelle bieten Annotationen einen Ausweg. So kann man eine Annotation mit dem Namen @InProgress definieren und mit dieser dann alle Programmteile versehen, die noch eine Veränderung benötigen. Das könnte dann wie folgt aussehen:


1  /**
2   * Dies ist eine Marker-Annotation welche anzeigt, dass eine
3   * Methode oder Klasse noch nicht fertig ist
4   */
5  @Target({ElementType.TYPE,ElementType.METHOD,ElementType.CONSTRUCTOR})
6  public @interface InProgress {}

Zeile 5 bewirkt, dass diese Annotation nur auf Typen, Methoden und Konstruktoren anwendbar ist. Mehr dazu im Kapitel Meta-Annotationen
Mit dieser Annotation könnte dann z.B. eine Methode markiert werden.


1  public class Test
2  @InProgress
3  public Object makeFancyTings(Object o) {
4   return o;
5  }

Hierfür könnte man ein Tool schreiben, welches den Quellcode eines Projektes parst und die Entwickler darüber informiert, welche Teile des Projektes noch zu bearbeiten sind.

Dieses Beispiel lässt sich natürlich beliebig erweitern. Man könnte sich eine @TODO Annotation vorstellen, welche als Parameter einen Text erhält in dem steht, was genau zu tun ist. Und auch diese Annotation könnte von einem externen Tool ausgewertet werden.


1  /**
2  * Annotation um anzuzeigen, dass und was noch
3  * getan werden muss.
4  */
5  public @interface TODO {
6    String value() default "[nothing]";
7  }

 


1  public class Test {
2    @TODO("Hier muß noch eine Menge getan werden")
3    public Object makeFancyTings( Object o) {
4      return o;
5    }
6  }

Erweitert man das Beispiel, so bekommt man eine Annotation, die vielseitiger einsetzbar ist:


1  public @interface GroupTODO {
2    enum Severity {CRITICAL, IMPORTANT, TRIVIAL};
3  
4    Severity severity() default Severity.IMPORTANT;
5    String item();
6    String assignedTo();
7    String dateAssigned();
8  }

Mit dieser Annotation lassen sich Programmteile markieren, an denen noch zu arbeiten ist oder in denen ein Fehler aufgetreten ist. Es ließe sich ein Schärfegrad festlegen und diese Aufgaben könnten verschiedenen Personen zugewiesen werden. Ein externes Tool kann diese Annotation auswerten und z.B. die Programmierer, denen ein Problem zugewiesen wurde, per Email benachrichtigt, wenn sie es nicht binnen eines gewissen Zeitraums behoben wurde.