„Reflection (Programmierung)“ – Versionsunterschied
[ungesichtete Version] | [ungesichtete Version] |
→Java Beispiel: -static, + javadoc |
|||
Zeile 14: | Zeile 14: | ||
Zugriff auf eine [[Java_Beans|Bean]] die in einem HttpServletRequest liegt: |
Zugriff auf eine [[Java_Beans|Bean]] die in einem HttpServletRequest liegt: |
||
/** |
|||
⚫ | |||
* Gibt den Inhalt einer Bean Methode zurück |
|||
* @param name Name der Bean im request |
|||
* @param property Methoden Name der Bean |
|||
* @return Return-Wert der Bean Methode oder null, wenn nich existent |
|||
*/ |
|||
⚫ | |||
⚫ | |||
try { |
try { |
||
Object bean = request.getAttribute(name); |
Object bean = request.getAttribute(name); |
||
if (bean == null) return null; |
if (bean == null) return null; |
||
⚫ | |||
⚫ | |||
value = getter.invoke(bean, new Object[0] /* parameter-objekte, hier keine parameter */); |
|||
⚫ | |||
} catch (Exception e) { |
} catch (Exception e) { |
||
e.printStackTrace(); |
e.printStackTrace(); |
||
return null; |
return null; |
||
} |
} |
||
return value.toString(); |
return (value==null?null:value.toString()); |
||
} |
} |
||
Version vom 19. Januar 2005, 00:32 Uhr
In der objektorientierten Programmierung (OOP) spricht man von Reflexion (engl. reflection), wenn zur Laufzeit eines Programmes Informationen über Eigenschaften von Typen und deren Mitgliedern (engl. member) gesammelt werden.
Ein Typ (engl. type) ist dabei i. d. R. eine Klasse (engl. class), die wiederum verschiedene Mitglieder (Attribute, Eigenschaften, Methoden, Schnittstellen) besitzen, die ihrerseits über Eigenschaften verfügen können.
Reflexion ermöglicht es nun, zur Laufzeit Informationen über Klassen oder deren Instanzen abfragen zu können. Bei einer Methode sind das u. a. deren Sichtbarkeit, die Art des Rückgabewertes oder die Art der Übergabeparameter. Die Umsetzung ist dabei sprachspezifisch realisiert.
Hochsprachen wie Java (java.lang.reflect) oder die Sprache C# (System.Reflection) des .NET-Frameworks bieten dazu entsprechende Pakete (engl. package) bzw. Namensräume (engl. namespace) an.
Eine wichtige Rolle spielt die Verwendung von Reflexion bei der aspektorientierten Programmierung, im Zusammenhang mit Generizität (d. h. der typsicheren Programmierung), aber auch in Fragen der Persistenz (persistente Datenhaltung von Objekten und deren Beziehungen).
Java Beispiel
Zugriff auf eine Bean die in einem HttpServletRequest liegt:
/** * Gibt den Inhalt einer Bean Methode zurück * @param name Name der Bean im request * @param property Methoden Name der Bean * @return Return-Wert der Bean Methode oder null, wenn nich existent */ public String getValue(String name, String property) { Object value = null; try { Object bean = request.getAttribute(name); if (bean == null) return null; Method getter = bean.getClass().getMethod(property, new Class[0] /* parameter-klassen, hier keine parameter */); value = getter.invoke(bean, new Object[0] /* parameter-objekte, hier keine parameter */); } catch (Exception e) { e.printStackTrace(); return null; } return (value==null?null:value.toString()); }
Aufruf-Beispiel:
System.out.println( getValue("UserBean", "getName") );
Siehe auch
Objektorientierte Programmierung, Aspektorientierte Programmierung