Private ist privat, warum gibt es dann java die Möglichkeit, mit Reflektion auf private Methoden zuzugreifen? [Duplikat]

8

Was sind die möglichen Probleme, auf die ich bei der Verwendung von Reflektionen achten muss? Ich bin in der Reflexion sehr verwirrt, warum Java diese Art von Funktionalität zur Verfügung stellt, um auf private Datenmitglieder zuzugreifen.

Privat: Wie ich denke, kann nur die Klasse, in der es deklariert ist, es sehen.

Dann Warum ist es möglich, auf private Dinge in anderen Klassen zuzugreifen? Diese Terminologie (Reflexion) überflutet mein Konzept der privaten (Access Specifier) ​​-Eigenschaften in Java vollständig.

Ich habe viele Links zu diesen Themen besucht, aber keine vollständige Erklärung zu diesen Themen gegeben. zB:

%Vor%

Bitte erläutern Sie das Szenario zu diesem Ansatz ausführlich? Ich brauche Vor- und Nachteile der privaten Zugriffsmöglichkeit in anderen Klassen?

    
Kunwar Avanish 16.10.2015, 07:50
quelle

2 Antworten

1

Alle "Private" und die anderen Formen der Deklaration sind, sind Flags für das Entwicklungstool, so dass es weiß, wie Sie das betreffende Feld oder die betreffende Methode verwenden möchten. Dies ist der Fall, wenn das Entwicklungstool dem Entwickler Warnungen oder Fehler anzeigt, wenn sie diese Klassen / Felder / Methoden in einer Weise verwenden, die nicht beabsichtigt war.

Reflection ist ein Werkzeug, mit dem der Entwickler diese Flags ignorieren oder umgehen kann, was darauf hinweist, dass Sie die Klasse / field / method so verwenden, wie sie nie gedacht war. Im Allgemeinen zeigt die Reflexion eine schlechte Architektur.

Es gibt also keine "Vor- oder Nachteile", um etwas als privat oder öffentlich oder statisch zu deklarieren; Es handelt sich lediglich um Tools, mit denen Sie Ihren Code sauber und kompartimentiert halten können, indem Sie Entwicklern nur den Zugriff / die Verwendung Ihrer Klassen / Felder / Methoden auf besondere Weise ermöglichen.

    
Dynisious 08.11.2015, 02:07
quelle
1

In den meisten Fällen sollen Zugriffsmodifizierer dazu beitragen, dass Teile Ihres Codes, die nicht von Personen gebunden werden sollen, nicht sichtbar sind. Die Möglichkeit, über Reflektion auf private Methoden zuzugreifen, kann aus der Tooling-Perspektive nützlich sein. Java verfügt über einen Sicherheitsmechanismus, mit dem diese Funktion deaktiviert werden kann. Diese Website enthält einige Informationen zur Java-Sicherheit Modell im Zusammenhang mit der Reflexion (unten auf der Seite).

Dies spielt nur in Situationen eine Rolle, in denen Ihr Code mit nicht vertrauenswürdigem Code ausgeführt wird. Wenn andere Entwickler Zugriff auf Ihren Code oder Ihre Bibliotheken haben, können Sie nichts tun, um sie daran zu hindern, den Code ohne einen Sicherheitsmanager auszuführen oder die Modifizierer zu ändern. Dies ist nur in einer kontrollierten Umgebung wirksam.

    
JimmyJames 04.04.2016 21:14
quelle

Tags und Links