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 8 Die Funktionsbibliothek
  gp 8.1 Die Java-Klassenphilosophie
    gp 8.1.1 Übersicht über die Pakete der Standardbibliothek
  gp 8.2 Wrapper-Klassen
    gp 8.2.1 Die Basisklasse Number für numerische Wrapper-Objekte
    gp 8.2.2 Die Klasse Integer
    gp 8.2.3 Wertebereich eines Typs und Überlaufkontrolle
    gp 8.2.4 Unterschiedliche Ausgabeformate
    gp 8.2.5 Autoboxing: Boxing und Unboxing
    gp 8.2.6 Die Character-Klasse
    gp 8.2.7 Die Boolean-Klasse
  gp 8.3 Benutzereinstellungen
    gp 8.3.1 Eine zentrale Registry
    gp 8.3.2 Einträge einfügen, auslesen und löschen
    gp 8.3.3 Auslesen der Daten und Schreiben in anderem Format
    gp 8.3.4 Auf Ereignisse horchen
  gp 8.4 Die Utility-Klasse System
    gp 8.4.1 Systemeigenschaften der Java-Umgebung
    gp 8.4.2 line.separator
    gp 8.4.3 Browser-Version abfragen
    gp 8.4.4 Property von der Konsole aus setzen
    gp 8.4.5 Umgebungsvariablen des Betriebssystems
    gp 8.4.6 Einfache Zeitmessung und Profiling
  gp 8.5 Ausführung von externen Programmen
    gp 8.5.1 Arbeiten mit dem ProcessBuilder
    gp 8.5.2 Die Rückgabe Process übernimmt die Prozesskontrolle
    gp 8.5.3 DOS-Programme aufrufen
    gp 8.5.4 Umgebungsvariablen und Startverzeichnis
    gp 8.5.5 Auf das Ende warten
    gp 8.5.6 Die Windows-Registry verwenden
    gp 8.5.7 Einen HTML-Browser unter Windows aufrufen
  gp 8.6 Klassenlader (Class Loader)
    gp 8.6.1 Woher die kleinen Klassen kommen
    gp 8.6.2 Die wichtigsten drei Typen von Klassenladern
    gp 8.6.3 Der java.lang.ClassLoader
    gp 8.6.4 Hot Deployment mit dem URL-ClassLoader
    gp 8.6.5 Das jre/lib/endorsed-Verzeichnis
    gp 8.6.6 getContextClassLoader() vom Thread
    gp 8.6.7 Wie heißt die Klasse mit der Methode main()?
  gp 8.7 Annotationen
    gp 8.7.1 Die eingebauten Annotations-Typen aus java.lang
    gp 8.7.2 @Deprecated
    gp 8.7.3 Annotationen mit zusätzlichen Informationen
    gp 8.7.4 @SuppressWarnings


Galileo Computing

8.7 Annotationedowntop

In Java 5.0 gibt es eine in die Programmiersprache eingebaute Fähigkeit für Metadaten: Annotationen. Das folgende Beispiel zeigt einen denkbaren Einsatz für WebServices.

import javax.jws.WebService;
import javax.jws.WebMethod;
  @WebService
  public class Calculator
{
    @WebMethod
    public int add( int xint y ) {
    return x + y;
  }
}

Die Annotationen sind Auszeichnungen der Metadaten und beginnen mit einem @-Zeichen, wie auch die javaDoc-Tags mit einem solchen Zeichen beginnen. (Das @-Zeichen, AT, ist auch eine gute Abkürzung für Annotation Type.) Hinter dem @ steht ein Bezeichner, der im Allgemeinen ein Wie-Wort (für die Linguisten: Adjektiv) sein sollte.


Galileo Computing

8.7.1 Die eingebauten Annotations-Typen aus java.lang  downtop

Oft haben wir schon Anwendungen vom Annotations-Typ @Override gesehen. Die Annotations-Typen sind die Definition und werden an ein Element gehängt; dann ist es eine konkrete Annotation. Während also @Override selbst der Annotations-Typ ist, ist @Override vor toString() die konkrete Annotation.

Neben @Override gibt es in Java 5 noch drei weitere im Paket java.lang definierte Annotationen und weitere vier, die für eigene Annotations-Typen interessant sind. Fassen wir die ersten zusammen, die vom Compiler beziehungsweise Laufzeitsystem besonders beachtet werden und eine eigene Semantik haben.


@Override Zeigt an, dass die annotierte Methode eine Methode aus der Oberklasse überschreibt.
@Deprecated Das markierte Element ist veraltet und sollte nicht mehr verwendet werden.
@SuppressWarnings Bestimmte Compiler-Warnungen sollen unterdrückt werden.

Tabelle 8.5   Vordefinierte Annotationen aus dem Paket java.lang


Galileo Computing

8.7.2 @Deprecated  downtop

Die Annotation @Deprecated übernimmt die gleiche Aufgabe wie das javaDoc-Tag @deprecated. Ein Unterschied bleibt: Das javaDoc-Tag kann nur vom javaDoc (beziehungsweise einem anderen Doclet) ausgewertet werden, während Annotationen auch andere Tools selbst zur Laufzeit auswerten können.

@Deprecated
public void fubar() { ... }

Falls die @Deprecated Methode fubar() genutzt wird, gibt es eine einfache Meldung. Die Übersetzung mit -Xlint:deprecation liefert die genauen Warnungen; im Moment ist das mit -deprecation gleich.


Galileo Computing

8.7.3 Annotationen mit zusätzlichen Informationen  downtop

Die Annotationen @Override und @Deprecated gehören zur Klasse der Marker-Annotationen, weil keine zusätzlichen Angaben nötig (und erlaubt) sind. Zusätzlich gibt es die »Single-value annotation« die genau eine zusätzliche Information bekommt und eine volle Annotation mit beliebigen Schlüssel/Werte-Paaren.


@AnnotationsTyp Marker-Annotation
@AnnotationsTyp( Wert ) Annotation mit genau einem Wert
@AnnotationsTyp( Schlüssel1=Wert1,                  Schlüssel2=Wert2, … ) Volle Annotation mit Schlüsse/Werte-Paaren


Galileo Computing

8.7.4 @SuppressWarnings  toptop

Die Annotation @SuppressWarnings steuert Compiler-Warnungen. Unterschiedliche Werte bestimmten genauer, welche Hinweise unterdrückt werden. Beliebt ist die Annotation bei der Umstellung von älterem Quellcode mit nicht-typisierten Datenstrukturen, um die Anzahl der Warnungen zu minimieren. Da sich mit Java 5.0 das Klassenformat änderte, gibt der Compiler beim Übersetzen älterer Klassen schnell eine »unchecked« Meldung.


Beispiel   Der Compiler soll für die ungenerisch verwendete Liste keine Meldung geben.

Listing 8.15   SuppressWarningsDemo.java, main()

  @SuppressWarnings( "unchecked" )
  public static void main( String[] args )
{
  ArrayList list = new ArrayList();
    list.add( "SuppressWarnings" );
  }
Die Annotation der lokalen Variable funktioniert nicht!

@SuppressWarnings("unchecked") ist eine Abkürzung von @SuppressWarnings(value={"unchecked"}); die zweite Schreibweise macht deutlich, dass ein Feld von Strings übergeben werden kann.




1  Auch aus dem Milität: »Fucked up beyond any recognition«.

 << 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