Java Reflection_Simple Beispiel für sich ändernde Variablen und Methoden in privat
Klasse Demotest {private String name = "123"; public getName () {System.out.println ("public getName" + name); Rückgabename; } private getName2 () {System.out.println ("private getName2" + name); Rückgabename; }}Ändern Sie beispielsweise den Wert des Namens. Wie man sich verändert. Wie man sich durch Java -Reflexion verändert
Schauen wir uns zunächst an, wie man Reflection verwendet, um die GetName -Methode aufzurufen
Klasse <DeMotest> calzz = deMoTest.class; Konstruktor Cons = clazz.getConstructor (neue Klasse [] {}); // Dies ist der Konstruktor, der das Klassenobjekt erhalten kann. Das Objekt der Klasse, deren Parameter konstruiert sind. Zum Beispiel: Demotest hat eine Konstruktormethode public Demotest (String arg0, String arg1) {......}
Zu diesem Zeitpunkt konstruktor con = clazz.getConstructor (neue Klasse [] {string.class, string.class}); Die beiden String.cals entsprechen arg0 bzw. arg1.
Als nächstes kommt:
Demotest test = (Demotest) con.Newinstance (neues Objekt [] {}); // Generieren Sie das entsprechende Objekt. Das Parameter neue Objekt [] {} ist der spezifische Wert des Parameters, der der Konstruktionsmethode entspricht. Wie bereits erwähnt: Demotest test = (Demotest) Cons.Newinstance (neues Objekt [] {"Li Che", "Zhang san"}); Nächste:
Method method = clazz.getMethod ("getName", New Class [] {string.class}); method.invoke (test, neues Objekt [] {"Wang Wu"});Zu diesem Zeitpunkt können Sie die Wu Wu ausdrucken.
Dann ändern Sie den Wert des Namens als privat.
1. Holen Sie sich zuerst das Feld,
Field field = clazz.getDeclaredfield ("Name"); 2. Setzen Sie das zugängliche Flag dieses Objekts auf den angegebenen booleschen Wert. Ein Wert von True zeigt an, dass das reflektierte Objekt die Überprüfung der Java -Sprachzugriffsprüfung bei der Verwendung abbrechen sollte. Ein Wert von False zeigt an, dass das reflektierte Objekt Java -Sprachzugriffsprüfung durchführen sollte.
field.setAccessible (true);
3.. Ändern Sie den Variablenwert
field.set ("name", "wang wu");OK;
Gleiches gilt für den Zugriff auf private Methoden.
Method method = clazz.getDeclaredMethod ("getName2"); method.setAccessible (true); method.invoke (test, neues Objekt [] {"Wang Wu"});Verwenden Sie GetDeclaredfields, um private und öffentliche geschützte Felder zu erhalten
Wenn Sie C.GetFields () verwenden; Sie können nur Eigenschaften des öffentlichen Typs erhalten
Das obige Java Reflection_Simple -Beispiel für die Änderung von Variablen und Methoden im privaten ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.