Verwendung der Reflexion
Reflection wird häufig von Programmen verwendet, die die Fähigkeit benötigen, das Laufzeitverhalten von Anwendungen zu untersuchen oder zu ändern, die auf der virtuellen Java-Maschine ausgeführt werden. Dies ist eine relativ fortgeschrittene Funktion und sollte nur von Entwicklern verwendet werden, die die Grundlagen der Sprache gut verstehen. In Anbetracht dieser Einschränkung ist die Reflexion eine leistungsstarke Technik und kann es Anwendungen ermöglichen, Operationen auszuführen, die sonst unmöglich wären.
Erweiterungsfunktionen
Eine Anwendung kann externe, benutzerdefinierte Klassen verwenden, indem Instanzen von Erweiterungsobjekten unter Verwendung ihrer vollständig qualifizierten Namen erstellt werden. Klassenbrowser und visuelle Entwicklungsumgebungen Ein Klassenbrowser muss in der Lage sein, die Mitglieder von Klassen aufzulisten. Visuelle Entwicklungsumgebungen können von der Verwendung von Typinformationen profitieren, die in Reflection verfügbar sind, um dem Entwickler das Schreiben von korrektem Code zu erleichtern. Debugger und Testtools Debugger müssen in der Lage sein, private Mitglieder in Klassen zu untersuchen. Test-Harnesses können mithilfe von Reflection systematisch auffindbare Set-APIs aufrufen, die für eine Klasse definiert sind, um eine hohe Codeabdeckung in einer Testsuite sicherzustellen.
Nachteile der Reflexion
Reflexion ist stark, sollte aber nicht wahllos verwendet werden. Wenn es möglich ist, eine Operation ohne Reflexion durchzuführen, ist es vorzuziehen, sie nicht zu verwenden. Die folgenden Bedenken sollten beim Zugriff auf Code über Reflection berücksichtigt werden.
Da es sich bei der Reflektion um Typen handelt, die dynamisch aufgelöst werden, können bestimmte Optimierungen der Java Virtual Machine nicht durchgeführt werden. Folglich haben reflektierende Operationen eine langsamere Leistung als ihre nicht reflektierenden Gegenstücke und sollten in Codeabschnitten vermieden werden, die in leistungsempfindlichen Anwendungen häufig aufgerufen werden.
- Sicherheitsbeschränkungen
Für die Reflexion ist eine Laufzeitberechtigung erforderlich, die möglicherweise nicht vorhanden ist, wenn sie unter einem Sicherheitsmanager ausgeführt wird. Dies ist eine wichtige Überlegung für Code, der in einem eingeschränkten Sicherheitskontext ausgeführt werden muss, z. B. in einem Applet.
Da durch Reflexion Code Vorgänge ausführen kann, die in nicht reflektierendem Code unzulässig sind, z. B. der Zugriff auf private Felder und Methoden, kann die Verwendung von Reflexion zu unerwarteten Nebenwirkungen führen, die den Code möglicherweise funktionsunfähig machen und die Portabilität zerstören. Reflektierender Code unterbricht Abstraktionen und kann daher das Verhalten bei Upgrades der Plattform ändern.
Quelle: Die Reflection-API