17
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1 Reflection Laufzeittypinformationen Objekterzeugung und Methodenaufrufe über Reflection Dynamic Proxy

PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1�������������� ��������������

��������������������� ������

Reflection

� Laufzeittypinformationen

� Objekterzeugung und Methodenaufrufe über Reflection

� Dynamic Proxy

Page 2: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 2�������������� ��������������

��������������������� ������

Reflection

� Programmatischer Zugriff auf Typinformationen• Über Klassen, Konstruktoren, Methoden und Felder

• Zur Laufzeit

• Zugriff erfolgt auf Basis des Byte-Codes

• man kann auf alle Deklarationen zugreifen, nicht aber auf den ausführbaren Code

� Mechanismus• Untersuchen von Objekten

• Erzeugen neuer Instanzen

• Aufruf von Methoden

• Lesen und Schreiben von Feldern

� Paket ��������������

Page 3: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 3�������������� ��������������

��������������������� ������

Reflection Klassenhierarchie

Member

AccessibleObject Array

java.lang.Object

java.lang.Class

MethodFieldConstructor

Modifier Proxy

InvocationHandler

Page 4: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 4�������������� ��������������

��������������������� ������

Informationen über ein Objekt

��� ��������

������������� ������������ ������������� ���� �����

��� �!�����

�������������

��� �"#�����

�����

��� ���� �� ������

������������� ������������� ������������

�$%� ����

��� ���� �

����� ����������� ������������� ��%����� ��& �����

����� �� ���� ����������� �� ����

������� �������������

��!��� ��������!���

Page 5: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 5�������������� ��������������

��������������������� ������

Anwendungen

� Klasse• Informationen über Paket, Superklasse, innere Klassen und Interfaces

• Auflistung der Felder, Konstruktoren und Methoden

• Erzeugen eines Objekts mit parameterlosem Konstruktor

• Dynamischer Typtest

� Feld• Informationen über Sichtbarkeit und Typ

• Lesen und Schreiben des Feldes für spezifiziertes Objekt

��� ��� '��������� ()*++����

��� ���,��(-!��-)++����

!������ ++����

%������.��

��� ��� '����*!�����'��� ���!���(-���-)*#�����#�����#�����#����� ����'����/�����(�#�)*

Page 6: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 6�������������� ��������������

��������������������� ������

Anwendungen

� Konstruktor• Typen der Parameter und Ausnahmen

• Erzeugen einer neuen Instanz

� Methode• Parametertypen, Ergebnistyp, Ausnahmetypen

• Informationen über Modifizierer

• Aufruf auf spezifiziertem Objekt wenn erlaubt

��� �� �������'����*"#���01���� '����*!�� �#� '�(!��)����$%� ����(��� )*

��������'����*"#���01���� '����*������2(�#�3���� )*

Page 7: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 7�������������� ��������������

��������������������� ������

Beispiel: Ausgabe der Klassendefinition (1)

� Es werden alle Deklarationen (Klasse, Felder, Konstruktoren, Methoden, innere Klassen) ausgegeben

� Ausgabe der Package-Deklaration

� Ausgabe Class- oder Interface-Deklaration

� #���� #���� #���� #��� ����� ����� ����� ����� ���������������� �������� (��� ���44)��

++����2������ (���44�������������� ���44�������������� ���44�������������� ���44�������������� ()()()() ''�� ��� ��� ��� ��)���++�������2�� �� ��������

&� ���� ���������(-���2�� -�5����44������2��()���,�����44������2��()���,�����44������2��()���,�����44������2��()���,��()()()() 5�-*-)*�

������������ ������ '����44��������� ���44��������� ���44��������� ���44��������� ()()()()*����� (6����44�� %��������44�� %��������44�� %��������44�� %�����()()()())��

&� ���� ���������(���������&�����(���������������&�����(���������������&�����(���������������&�����(������)))) 5�-���� -�5����44���,��()�5�-����� -�5����44���& ����� ()���,�����44���& ����� ()���,�����44���& ����� ()���,�����44���& ����� ()���,��()()()())*�

��� � � � �&� ���� ���������(���������&�����(���������������&�����(���������������&�����(���������������&�����(������)))) 5�-������� -�5�

���44���,�����44���,�����44���,�����44���,��()()()())*��

������� ������ �

�� �� � ��� ������ ���������� ������� ������ ���������������� ����

// Beispielausgabe für java.util.LinkedList

Page 8: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 8�������������� ��������������

��������������������� ������

Beispiel: Ausgabe der Klassendefinition (2)

� Ausgabe der implementierten oder erweiterten Interfaces

&�����/ � ��� '��$�$�$�$ &�����/ �()*��� 01������� '����44���%����� ���44���%����� ���44���%����� ���44���%����� ()()()()*���� (������ ������ 6'�7)��

&�����/ � ��� '��$ &�����/ �()*�� (6����44�� %��������44�� %��������44�� %��������44�� %�����()()()())��

���������(-����������� -)*���� � � � �

���������(-�������� -)*���������� (������������ ��'�7*���8������� ������*��55)��

���������(������ 0�1���,�������� 0�1���,�������� 0�1���,�������� 0�1���,��()()()())*����� (��8������� ������9:)��

���������(-3�-)*����� � � � �

���������(-��-)*��

�&� ���� ���������(���)*�

� ��� ������ ������ ���������� ���� ����� �������������� ���� � �

Page 9: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 9�������������� ��������������

��������������������� ������

Beispiel: Ausgabe der Klassendefinition (3)

� Ausgabe der statischen Felder

� und nicht-statischen Felder

!���01���� '����44���������!��� ���44���������!��� ���44���������!��� ���44���������!��� ()()()()*�������� (��'�7*���8���� ������*��55)��

���� (�������� &�����(��� 0�1��������� �������� &�����(��� 0�1��������� �������� &�����(��� 0�1��������� �������� &�����(��� 0�1��������� ())())())()))�������!���(��� 0�1)*�

�� �������������� ��� � ��� ����� !������"#$�

������������������������ ����� ����� ����� ����� ���������������� �����!���(!��� ���)��&� ���� ���������(-��-�5����������&�����(������������ ���������&�����(������������ ���������&�����(������������ ���������&�����(������������ ())())())()) 5�

-�-�5����������()���,�����������()���,�����������()���,�����������()���,��()()()() 5�-�-�5�������,��������,��������,��������,��()()()() 5�-*-)*��

�������� (��'�7*���8���� ������*��55)������ (6��������� &�����(��� 0�1��������� �������� &�����(��� 0�1��������� �������� &�����(��� 0�1��������� �������� &�����(��� 0�1��������� ())())())()))��

�����!���(��� 0�1)*��

� ����������������� ������ ����������%&���' (����������������������� ��� �����

Page 10: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 10�������������� ��������������

��������������������� ������

Beispiel: Ausgabe der Klassendefinition (4)

� Ausgabe der Konstruktoren

��� �� ����01���� �� ���� �'����44������������ �� ���� ���44������������ �� ���� ���44������������ �� ���� ���44������������ �� ���� ()*()*()*()*�������� (��'�7*���8���� �� ���� ������*��55)��

�������� �� ����(��� �� ���� 0�1)*�� �� �� ������ ����������)*�

�� �� ������ ����������)������ �� ������*������������������������� ����� ����� ����� ����� ���������������� �������� �� ����(��� �� ���� �)��

&� ���� ���������(-��-�5����������&�����(���������� ���������&�����(���������� ���������&�����(���������� ���������&�����(���������� ())())())()) 5�-�-�5����,��()5���� �� ������� ;� �(�������������� �������������� �������������� �������������� ()()()())�5�-*-)*�

������� ����� &��������� �� ������� ;� �(��� ��� ��� ��� 01�01�01�01��������� �������� �������� �������� )��&�����/ � ����� &����� '��$ &�����/ �()*������ &�����������(-(-)*��������� (������������ ��'�7*���8������ ������*��55)��

����� &�����������(�������� 0�1���,���������� 0�1���,���������� 0�1���,���������� 0�1���,��()()()())*����� (��8������ ������9:)��

����� &�����������(-3�-)*��

������ &�����������(-)-)*��� ���� ���� ���� �� ����� &��������&�����()*�

Page 11: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 11�������������� ��������������

��������������������� ������

Beispiel: Ausgabe der Klassendefinition (5)

� Ausgabe der Methoden

� Ausgabe der inneren Klassen

�����01������ '����44�������������� ���44�������������� ���44�������������� ���44�������������� ()*()*()*()*�������� (��'�7*���8������ ������*��55)��

�����(����� 0�1)*�� �� �� ���� ���+����� � ���)*�

�� �� ��� �����+ )���� ���+�����*��� �� ��� ���#����+ )���� ���+�����*�,

������������������������ ����� ����� ����� ����� ���������������� �����(����� �����)��&� ���� ���������(-��-�5����������&�����(�������������� ���������&�����(�������������� ���������&�����(�������������� ���������&�����(�������������� ())())())())5-�-�5��

���������� �����()���,������������ �����()���,������������ �����()���,������������ �����()���,��()()()() 5��-�-�5���������,����������,����������,����������,��()()()() 5���� �� ������� ;� �(������������������ ������������������ ������������������ ������������������ ()()()())�5�-*-)*�

��� 01�������� '����44������������ ���44������������ ���44������������ ���44������������ ()()()()*��������� (��'�7*���8�������� ������*��55)��

�������� (������� 0�1)*�&� ���� ���������()*

Page 12: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 12�������������� ��������������

��������������������� ������

Beispiel: Methodenaufrufe über Reflection (1)

� Folgende Anweisungen ohne Verwendung von Reflection

werden im Anschluss über Reflection ausgeführt

;� ���*���'��$�$�$�$ ;��2�;� �()*�����(-<-)*�����(-�-)*�����(:3�-/-)*�

&� ���� ���������(����&�����())*�

���� (��������� (-<-))��&� ���� ���������(-< �������� ����-)*�

[A, B, C]

A contained in l

Page 13: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 13�������������� ��������������

��������������������� ������

Beispiel: Methodenaufrufe über Reflection (2)

� Zugriff auf Klasse ;��2�;� � und erzeugen des Objekts

� Zugriff auf Methode ���("#���) und Aufrufe

� Zugriff auf Methode ���(���3�"#���) und Aufruf

������������ �;� ���*�

++ ��'��$ ;��2�;� �()*��� ���2�;� ���� '���� ���,��(-����� ����;��2�;� �-)*���'�(;� �)���2�;� ���� ��$%� ����()*�

++ �����(-<-)*����� �������� '�

���2�;� ���� ��������(-���-3��$ ��� 01���"#������� ��� ��� ��� �)*��������������2(�3��$�$�$�$ "#���01���-<-��)*�

++ �����(-�-)*�������������2(�3��$�$�$�$ "#���01���-�-��)*�

++ �����(:3�-/-)*������ ��������=�'����2�;� ���� ��������(-���-3�

�$�$�$�$ ��� 01���%������.��3�"#������� ��� ��� ��� �)*���������=�����2(�3��$�$�$�$ "#���01����$�$�$�$ %����(:)3�-/-��)*�

Page 14: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 14�������������� ��������������

��������������������� ������

Beispiel: Methodenaufrufe über Reflection (3)

� Aufruf von ��&�����()

� Aufruf von ������� ("#���)

++ &� ���� ���������(����&�����())*������ ��&���������� '�

���2�;� ���� ��������(-��&�����-3��$�$�$�$ ��� 071)*�&� ���� ���������(��&���������������2(�3��$�$�$�$ "#���071))*�

++ � (��������� (-<-))��++ &� ���� ���������(-< �������� ����-)*�++ �

����� ������� ����� '����2�;� ���� ��������(-������� -3��$�$�$�$ ��� 01���"#������� ��� ��� ��� ��)*

/����� ����� '�(/�����)������� ����������2(�3��$�$�$�$ "#���01��-<-�)*����� (������#�����>�� ())��

&� ���� ���������(-< �������� ����-)*�

���������������������� (,�& ��������������� )��?���������������������� (%�����<�� ����������� )���?���������������������� (%�����<�� �������� )��?���������������������� (%���������������������� )��?���������������������� (��� ,��!� ���������� )��?���������������������� (%� ������������������ )��?���������������������� (&� ������������ )��?�

Page 15: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 15�������������� ��������������

��������������������� ������

Vordefinierte Typen

� Für die primitiven Datentypen sind ��� -Objekte als Konstante definiert @ /����.�� - Typ #��

@ &������.�� - Typ ����

@ %������.�� - Typ ���

@ ;�����.�� - Typ ����

@ ����������.�� - Typ ����

@ /�������.�� - Typ #�����

@ !������.�� - Typ ����

@ �� #���.�� - Typ �� #�

@ >�����.�� - Typ ����

� Anwendung z.B.

���� (���������� �����())�''�%������.��)�������������� �� '�((%����)����������2(�#�3��$�$�$�$ "#���071)))����>�� ()*�

Page 16: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 16�������������� ��������������

��������������������� ������

Dynamic Proxy

� Platzhalterobjekt• Implementiert zur Laufzeit spezifizierte Liste von Interfaces

• Methodenaufrufe werden an Invocation Handler weitergeleitet

� #���� #���� #���� #��� ��� ��� ��� ��� ;������������ ������� ������� ������� %���������A����� ������������������������� �����&���� ���*

� #���� #���� #���� #��� ;����(�����&���� ���)����� ��� ��� ��� ���� '����*

� #���� #���� #���� #��� "#��������2("#��� �����3������������3�"#���01���� )�����$ ����$ ����$ ����$ ����$�#� �

����

;���� ������'��$�$�$�$ ;����(&� ���� �)*!�� ������'�(!��)��������$�����%� ����(!������ ������ ;����()3��$�$�$�$ ��� 01���!������ �3������)*

������ �������(BBB)*

� #���� #���� #���� #��� ������������������������ !�� �� #���� #���� #���� #��� ���������������� �������(������������ �)*

Page 17: PowerPoint - 13.Reflectionssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/13.Reflection.pdf · Reflection Programmatischer Zugriff auf Typinformationen • Über Klassen, Konstruktoren,

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 17�������������� ��������������

��������������������� ������

Zusammenfassung

� Reflection• Programmatischer Zugriff auf Typinformationen zur Laufzeit

• Erzeugen neuer Instanzen, Aufruf von Methoden, Zugriff auf Felder

� Dynamic Proxy• Platzhalterobjekt, das Liste von Interfaces implementiert