Zugriff auf private Felder über Java Reflection
Der Zugriff auf private Felder durch Reflektion ist ein umstrittenes Thema in der Java-Programmierung. Mit dieser Technik kann man die durch die Kapselung auferlegten Zugriffsbeschränkungen umgehen und die Werte privater Felder abrufen, was Bedenken hinsichtlich einer Verletzung der Kapselungsprinzipien aufkommen lässt.
Betrachten Sie das folgende Beispiel:
class Test { private String str; public void setStr(String value) { str = value; } }
Es stellt sich die Frage: Ist es möglich, den Wert des privaten Felds „str“ mithilfe von Reflektion zu ermitteln?
Antwort:
Ja, das ist es ist tatsächlich möglich, sofern entsprechende Sicherheitsberechtigungen erteilt werden. Durch die Verwendung der Field.setAccessible(true)-Methode können Sie Zugriff auf ein privates Feld aus einer anderen Klasse gewähren.
Der folgende Codeausschnitt zeigt, wie dies erreicht wird:
import java.lang.reflect.*; class Other { private String str; public void setStr(String value) { str = value; } } class Test { public static void main(String[] args) // Just for the ease of a throwaway test. Don't // do this normally! throws Exception { Other t = new Other(); t.setStr("hi"); Field field = Other.class.getDeclaredField("str"); field.setAccessible(true); Object value = field.get(t); System.out.println(value); } }
Achtung:
In typischen Szenarien wird dringend davon abgeraten, auf private Felder zuzugreifen. Dadurch ignorieren Sie die Kapselungsmechanismen der Klasse und überschreiben möglicherweise wichtige Validierungsprüfungen oder ändern andere Felder unerwartet.
Das obige ist der detaillierte Inhalt vonKann Java Reflection die Kapselung umgehen, um auf private Felder zuzugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!