Protokoll Stunde 4

Werbung
Praktikum aus Softwareentwicklung 2, Stunde 4
Lehrziele/Inhalt
1. Reflection Fortsetzung
2. Eclipse-Tastenkürzel
Reflection Fortsetzung
Dynamischer Proxy
Ein dynamischer Proxy ist eine Klasse, die eine Liste von Interfaces zur Laufzeit implementiert. Java
leitet die Aufrufe an einen dynamischen Proxy an ein Handler-Objekt (Interface InvokationHandler)
weiter. Einsatzgebiete für dynamische Proxies sind zB: Methoden über das Netzwerk aufrufen,
Testen und Loggen von Methodenaufrufen.
Dynamische Proxies können über die Methode Proxy.newProxyInstance angelegt werden.
Annotationen
Seit Java 1.5 haben Programmierer die Möglichkeit Metainformationen zu Elementen wie zB: Klassen
und Methoden anzugeben. Annotationen sind eine Alternative zu den vorher benutzten MarkerInterfaces. Marker-Interfaces sind Interfaces ohne Methoden, sie werden Implementiert, um
Aussagen über Klassen zu treffen. Beispiele für Marker-Interfaces sind Serializable und Cloneable.
Annotation bieten aber mehr Möglichkeiten als Marker-Interfaces. Annotationen können auf Klassen,
Konstruktoren, Methoden, Felder, lokale Variablen, Packages, Parameter und Annotationen
angewendet werden. Diese Elemente werden unter dem Interface AnnotatedElement
zusammengefasst. Pro Element können beliebig viele Annotationen angebracht werden, aber nur
jeweils eine Annototation pro Annotationsart. Annotationen können mit Konstanten parametriert
werden, folgende Typen sind erlaubt: primitive Datentypen, String, Class, Enums, Annotationen und
eindimensionale Arrays dieser Typen.
Arbeiten mit Annotationen
Annotationen werden wie Interfaces definiert, allerdings wird dem Schlüsselwort interface ein "@"
vorangestellt. Die Parameter der Annotationen werden auf Methoden mit Rückgabetyp abgebildet,
wobei ein Default-Wert angegeben werden kann.
Java bringt folgende Annotationen mit, mit denen man eigene Annotationen beschreiben kann:




@Target: Welche Elemente können annotiert werden, zB: @Target(ElementType.TYPE) oder
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented: Soll die Annotation in die JavaDoc aufgenommen werden
@Inherited: Soll die Annotation an Subklassen vererbt werden. Das funktioniert nur für
Annoationen die auf Klassen angebracht werden.
@Retention: Wie lange soll die Annotation abfragbar sein, zB:
nur im Quellcode @Retention(RetentionPolicy.SOURCE),
in der Klassendatei @Retention(RetentionPolicy.CLASS) oder
auch zur Laufzeut über Reflection @Retention(RetentionPolicy.RUNTIME)
© Markus Löberbauer 2010
Seite 10
Beispiel-Annotation mit einem int-Wert und einem String-Wert:
@interface SampleAnnotation {
int value();
String stringProp() default "default";
}
Anwenden der Annotation:
@SampleAnnotation(value=1, stringProp = "test")
public class Test {}
Werte mit default-Klausel können ausgelassen werden:
@SampleAnnotation(value=1)
public class Test {}
Muss nur ein Wert gesetzt werden und dieser Wert hat den Namen "value", dann kann dieser Wert
ohne Namen gesetzt werden:
@SampleAnnotation(1)
public class Test {}
Beispiel: Reflection Test Suite
Eclipse-Tastenkürzel
1. F3: zur Deklaration des Elements gehen
2. F4: Vererbungshierarchie einer Klasse anzeigen
3. Ctrl-Shift-G: Verwendungen einer Klasse, Methode, … suchen
© Markus Löberbauer 2010
Seite 11
Herunterladen