Reflection API - PowerPoint PPT Presentation

1 / 16
About This Presentation
Title:

Reflection API

Description:

Reflection API ETIS SS04 – PowerPoint PPT presentation

Number of Views:70
Avg rating:3.0/5.0
Slides: 17
Provided by: fro149
Category:
Tags: api | java | jdbc | reflection

less

Transcript and Presenter's Notes

Title: Reflection API


1
Reflection API
ETIS SS04
2
Gliederung
  • Motivation
  • Einsatzgebiete
  • Metaprogrammierung
  • Klasse Class
  • Zugriff auf Klassenbestandteile
  • Erzeugen von Objekten
  • Manipulieren von Objekten
  • Felder setzen
  • Methodenaufruf
  • Zusammenfassung

3
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
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
Einsatzgebiete
  • Für Entwicklung der Beans- und Serialisierungs-API
    s benötigt
  • Für Debugger, GUI-Builder, Class-Browser
  • ORM, JUnit, JDBC

6
Metaprogrammierung
  • 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
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
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
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
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
Felder setzen
  • Normal
  • p.pname Lisa
  • Mit Reflection
  • Class c p.getClass()
  • Field name c.getDeclaredField(pname)
  • name.set(p, Lisa)

12
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
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
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
Quellen
  • http//www.dpunkt.de/java/Die_Sprache_Java/Objekto
    rientierte_Programmierung_mit_Java/70.html
  • http//www.rz.fhtw-berlin.de/hjp3/k100268.htmlkap
    itelreflection
  • http//www.ifs.tuwien.ac.at/mbach/misc/JavaVsSmal
    lTalk/node35.html
  • http//www.jeckle.de/vorlesung/java/kap3.htmlrefl
    ectionAPI
  • http//java.sun.com/docs/books/tutorial/reflect/
  • 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
  • http//www.voelter.de/data/presentations/meta.ppt
  • Wutka, M., J2EE Developer s Guide,
    MarktTechnik, München, 2002

16
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
Write a Comment
User Comments (0)
About PowerShow.com