Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Reflection API ETIS SS04. Reflection API2 Gliederung Motivation –Einsatzgebiete –Metaprogrammierung Klasse Class Zugriff auf Klassenbestandteile Erzeugen.

Ähnliche Präsentationen


Präsentation zum Thema: "Reflection API ETIS SS04. Reflection API2 Gliederung Motivation –Einsatzgebiete –Metaprogrammierung Klasse Class Zugriff auf Klassenbestandteile Erzeugen."—  Präsentation transkript:

1 Reflection API ETIS SS04

2 Reflection API2 Gliederung Motivation –Einsatzgebiete –Metaprogrammierung Klasse Class Zugriff auf Klassenbestandteile Erzeugen von Objekten Manipulieren von Objekten –Felder setzen –Methodenaufruf Zusammenfassung

3 Reflection API3 Motivation (I) Core Reflection API: java.lang.reflect –seit JDK 1.1 integraler Bestandteil der Java- Klassenbibliothek außerdem: Object + Class in java.lang Spiegelt Klassen, Schnittstellen, Objekte in aktueller JVM wider Ermöglicht Zugriff auf Informationen über Klassen (Metainformationen), deren: –Quellcode nicht vorhanden und/oder –Aufbau nicht bekannt ist

4 Reflection API4 Motivation (II) Ermöglicht, z.B.: –Informationen über Methoden, Variablen, Superklassen,... –Laden und Instanzieren von Klassen, ohne dass Name zur Compilezeit bekannt –Methoden aufrufen und Membervariablen setzen, wenn Namen erst zur Laufzeit des Programmes bekannt –Arrays kreieren (Größe + Komponententyp zur Laufzeit nicht bekannt + Veränderung der Komponenten)

5 Reflection API5 Einsatzgebiete Für Entwicklung der Beans- und Serialisierungs-APIs benötigt Für Debugger, GUI-Builder, Class-Browser ORM, JUnit, JDBC

6 Reflection API6 Metaprogrammierung MetaklasseObjektKlasse normal: -Programm kennt Daten, aber nicht sich selbst Metaprogrammierung: -Programme als Daten -Programm hat Zugriff auf sich selbst -Programm liegt in selber Präsentation wie Daten vor

7 Reflection API7 Ausgangspunkt: Klasse Class im Paket java.lang Instanzen dieser Klasse repräsentieren Klassen + Interfaces laufender Java Anwendung Instanzen automatisch durch JVM konstruiert Instanz abfragbar, wenn: –Objekt der Klasse verfügbar, mit: Class c = o.getClass(); –Name der Klasse zur Compilezeit bekannt, mit: Class c = java.awt.Button.class; –Klassenname zur Lauf- aber nicht zur Compilezeit, mit: Class c = Class.forName(java.awt.Button);

8 Reflection API8 Zugriff auf Klassenbestandteile für dynamischen Zugriff auf Klassenbestandteile Klassen: Constructor, Method und Field Instanzen dieser Klassen mit Methoden der Klasse Class erzeugt Field fields [] = c.getFields(); Field fields [] = c.getDeclaredFields(); Field field = c.getField(name); Hinweis: mit erhaltenen Field-Objekten kann man mehrere Instanzen bearbeiten

9 Reflection API9 Zugriff auf Klassenbestandteile Ermittlung der Methoden einer Klasse: Method m[] = c.getMethods(); Method m[] = c.DeclaredMethods(); Class param[] = new Class[] {Object.class} Method m = c.getMethod(add, param) Weiterhin ermittelbar: – Interfaces, Superklassen – Packagename, Name der Klasse – Modifier (z.B. public, final) – ob eine Datentyp primitiv ist

10 Reflection API10 Erzeugen von Objekten Normal: Person p = new PersonBean(); Mit Reflection: Class c = Class.forName(demo.PersonBean); Person p = (Person) c.newInstance(); Vorgehen ermöglicht Zugriff auf Klasse, die während Erstellung der Anwendung unbekannt ist –jede beliebige Klasse, die Interface Person implementiert –evtl. aus Property-Datei

11 Reflection API11 Felder setzen Normal: p.pname = Lisa; Mit Reflection: Class c = p.getClass(); Field name = c.getDeclaredField(pname); name.set(p, Lisa);

12 Reflection API12 Methodenaufruf Normal: p.setFirstName(Maria); Mit Reflection: Class c = p.getClass(); Class argDef[] = {String.class}; Method m = c.getMethod(setFirstName, argDef); Object arg[] = {Maria}; m.invoke(p, arg);

13 Reflection API13 Zusammenfassung(I) Reflection einzusetzen, wenn: –Klassen zur Laufzeit einzubinden, die zur Compile-Zeit noch nicht bekannt –Schnittstellen der Klassen nicht durch Interfaces oder abstrakte Klassen definiert, sondern Schnitt- stellenkonventionen und -mustern folgen (Java Beans) Fast vollständige Kontrolle über Objekte: –Möglich Methodenname, Übergabeparameter, Attribute, Klassennamen in Dateien abzulegen

14 Reflection API14 Zusammenfassung(II) Hohe Flexibilität Aber: Mehrfaches an Quelltext Performanceeinbußen Keine Prüfung des Compilers auf Korrektheit der Datentypen Daher: Reflection API nur einsetzen, wo wirklich erforderlich!!!

15 Reflection API15 Quellen mmierung_mit_Java/70.htmlhttp://www.dpunkt.de/java/Die_Sprache_Java/Objektorientierte_Progra mmierung_mit_Java/70.html Wille, S., Go To Java Server Pages, Addison-Wesley, München, 2001 Holubek, A.: Willkommen im Dungeon, Java Magazin,3/2000, S.20: java-praxis Reflection API Wutka, M., J2EE Developer s Guide, Markt+Technik, München, 2002

16 Reflection API16 Java-Beans + Reflection Reflection (eigentlich Introspection) angewandt, um Properties der BeanKlasse zur Laufzeit zu ermitteln, auszulesen bzw. neu zu setzen Properties spezifisch für jede Bean-Klasse, folgen aber Muster(setXXX und getXXX) Introspection basiert auf Reflection, aber höhere Sicht – wichtige Methoden: java.beans.Introspector java.beans.PropertyDescriptor


Herunterladen ppt "Reflection API ETIS SS04. Reflection API2 Gliederung Motivation –Einsatzgebiete –Metaprogrammierung Klasse Class Zugriff auf Klassenbestandteile Erzeugen."

Ähnliche Präsentationen


Google-Anzeigen