61 lines
1.4 KiB
Markdown
61 lines
1.4 KiB
Markdown
<!--
|
|
title: Reflections
|
|
description: Folien für Reflections in Programmieren 2
|
|
url: https://git.henriburau.de/tutorien/programmieren-2
|
|
header: Programmieren 2 **Tutorium**
|
|
footer: Henri Burau
|
|
-->
|
|
|
|
# Reflections
|
|
|
|
---
|
|
|
|
# Grundlagen
|
|
|
|
Ermöglichen das Abfragen von Metainformationen zur Laufzeit. Dazu gehört der
|
|
dynamische Typ eines Objekts, dessen Felder (private und öffentliche) und
|
|
Methoden. Benutzt werden Reflections vor allem beim Datenaustausch in
|
|
verteilten Systemen.
|
|
|
|
---
|
|
|
|
# Java Reflection API
|
|
Die wichtigsten Klassen aus den Java Reflections sind:
|
|
|
|
* ``Class``
|
|
* ``Field``
|
|
* ``Constructor``
|
|
* ``Method``
|
|
* etc. (siehe [Reflection API](<!-- TODO -->))
|
|
|
|
---
|
|
|
|
# Anwendung
|
|
|
|
```java
|
|
Dreieck dreieck = new Dreieck();
|
|
Class<?> dreieckKklasse = dreieck.getClass();
|
|
|
|
System.out.println(dreieckKlasse.getSimpleName());
|
|
// Konsole: Dreieck
|
|
```
|
|
|
|
---
|
|
|
|
# Benutzung
|
|
|
|
Reflections sollten nur genutzt werden wenn es gar nicht anders geht. Man kann
|
|
sonst schnell die schönen Objektstrukturen zerstören die ein Software-Architekt
|
|
entwickelt hat.
|
|
|
|
---
|
|
|
|
# Aufgaben
|
|
|
|
1) Schreibe eine statische Methode ``schreibKonstruktoren(Object object)``
|
|
welche die Parameter aller Konstruktoren von ``object`` auf die Konsole
|
|
schreibt (``System.out.println(...)``).
|
|
|
|
2) Schreibe eine statische Methode `schreibPrivateFelder(Object object)` welche
|
|
die Namen und Typen aller **privaten** und **statischen** Felder von `object` auf die Konsole schreibt.
|