Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 5
Java ist auch eine Insel

Java ist auch eine Insel
5., akt. und erw. Auflage
1454 S., mit CD, 49,90 Euro
Galileo Computing
ISBN 3-89842-747-1
gp Kapitel 21 Reflection und Annotationen
  gp 21.1 Metadaten
    gp 21.1.1 XDoclet
  gp 21.2 Mit dem Class-Objekt etwas über Klassen erfahren
    gp 21.2.1 An ein Class-Objekt kommen
    gp 21.2.2 Was das Class-Objekt beschreibt
    gp 21.2.3 Der Name der Klasse
    gp 21.2.4 Die Arbeit auf dem Feld
    gp 21.2.5 instanceof mit Class-Objekten
    gp 21.2.6 Oberklassen finden
    gp 21.2.7 Implementierte Interfaces einer Klasse oder eines Inferfaces
    gp 21.2.8 Modifizierer und die Klasse Modifier
    gp 21.2.9 Die Attribute einer Klasse
    gp 21.2.10 Methoden einer Klasse erfragen
    gp 21.2.11 Konstruktoren einer Klasse
    gp 21.2.12 Annotationen
  gp 21.3 Objekte manipulieren
    gp 21.3.1 Objekte erzeugen
    gp 21.3.2 Die Belegung der Variablen erfragen
    gp 21.3.3 Eine generische toString()-Funktion
    gp 21.3.4 Variablen setzen
    gp 21.3.5 Private Attribute ändern
  gp 21.4 Methoden aufrufen
    gp 21.4.1 Statische Methoden aufrufen
    gp 21.4.2 Dynamische Methodenaufrufe bei festen Methoden beschleunigen
  gp 21.5 Informationen und Identifizierung von Paketen
    gp 21.5.1 Geladene Pakete
  gp 21.6 Annotationen
    gp 21.6.1 Neue Annotationen definieren
    gp 21.6.2 Annotationen mit genau einem Element
    gp 21.6.3 Beliebige Schlüssel-/Werte-Paare
    gp 21.6.4 Vorbelegte Elemente
    gp 21.6.5 Annotieren von Annotations-Typen
    gp 21.6.6 Annotationen zur Laufzeit ausgelesen
    gp 21.6.7 Mögliche Nachteile von Annotationen

Kapitel 21 Reflection und Annotationen

Aber wofür soll das gut sein? – Advanced Computing Systems Division von IBM, 1968, zum Microchip

Das Reflection-Modell erlaubt es uns, Klassen und Objekte, die zur Laufzeit von der JVM im Speicher gehalten werden, zu untersuchen und in begrenztem Umfang zu modifizieren. Das Konzept der Reflection (oder auch Introspektion) wird besonders interessant, wenn wir uns näher mit Java-Beans beschäftigen oder Hilfsprogramme zum Debuggen oder GUI-Builder schreiben. Diese Programme heißen auch Meta-Programme, da sie auf den Klassen und Objekten anderer Programme operieren. Reflection fällt daher auch in die Schlagwortkategorie »Meta-Programming«.


Galileo Computing

21.1 Metadatedowntop

Ein Metadatum ist eine Information über eine Information. In Java beschreibt ein Class-Objekt, was Klassen »können«, also welche Methoden sie haben und welche Attribute sie besitzen.

Lange gibt es javaDoc-Tags, die ebenfalls Metadaten sind. So ist im folgenden Beispiel die Methode veraltet, weil das javaDoc-Tag @deprecated gesetzt ist.

/**
 * Sets the day of the month of this <tt>Date</tt>
   object to the specified value. ....
 * @deprecated As of JDK version 1.1, replaced by ....
 */
@Deprecated
public void setDate( int date ) {
  getCalendarDate().setDayOfMonth( date );
}

In diesem Fall gilt das javaDoc-Tag für genau eine Methode, die dann als annotiert gilt. Die Beschreibungen können aber noch weiter gehen und müssen nicht nur auf Methodenebene bleiben. So annotiert das Tag @author den Autor und damit gleich eine ganze Klasse oder Schnittstelle.

Um die in Kommentaren eingesetzten javaDoc-Tags muss sich der Java-Compiler nicht kümmern, obwohl er @deprecated eine Ausnahme zugesteht. Es ist Aufgabe des externen Programms javadoc – eines so genannten Doclets –, aus diesen Kommentaren etwas zu machen, etwa eine Sammlung von verknüpften HTML-Dokumenten.


Galileo Computing

21.1.1 XDoclet  toptop

javaDoc-Tags haben sich in den letzten Jahren als sehr flexibel erwiesen. Zwar belegt Sun einige Tags mit bestimmten Bedeutungen (@see, @autor, …) doch können Tags in den Dokumentations-Kommentaren im Prinzip frei gewählt werden. Ein Doclet muss nicht nur HTML generieren, sondern könnte ebenso neue Quellcode- oder XML-Dateien erzeugen, oder Tests durchführen, ob Methodennamen gut gewählt sind.

Zu Nutze macht sich das etwa das Programm XDoclet (http://xdoclet.sourceforge.net/). Es generiert aus javaDoc-Tags Schnittstellen, Hilfsklassen, Deskriptoren und mehr. Häufig anzutreffen ist es bei Enterprise Java Bean, aber auch bei OR-Mapping oder Servlets. Eine Session-Bean ist nach der Java Enterprise Edition 1.4 in wenigen Zeilen definiert:

import javax.ejb.SessionBean;
/**
 * @ejb.bean name = "Hallo"
 *           type = "Stateless"
 *
 **/
public abstract class HalloBean implements SessionBean
{
  /**
   * @ejb.interface-method
   */
  public String hallo( String name ) {
    return "Hallo " + name;
  }
}

Ein Ant-Tag nimmt den so annotierten Quellcode und generiert über ein Doclet alle für die Enterprise JavaBeans nötigen Dateien.

 << zurück




Copyright © Galileo Press GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de