Manchmal wissen Sie, was sich in diesem Objekt befindet, aber aus verschiedenen Gründen können Sie es nicht in ein Objekt umwandeln. Sie möchten einfach nur einige Dinge aus diesem Objekt extrahieren. Sie müssen zu diesem Zeitpunkt Reflexion verwenden.
Wenn Ihre Klasse so aussieht:
private class User {String userName;String userPassword;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserPassword() {return userPassword;}public void setUserPassword(String userPassword) {this.userPassword = userPassword;}}Wir sind neu, weisen Wert zu und transformieren nach oben in das Objekt
User user = new user (); user.setusername ("xu fenglai"); user.setUserPassword ("1596666"); Object Object = user;Holen Sie sich den Attributnamen und speichern Sie ihn in einem Array
java.lang.reflect.field [] fields = Object.getClass (). getDeclaredfields (); for (java.lang.reflect.field f: fields) {log.i ("xbh", f.getName ());}Ausgabe
12-17 12: 02: 10.199 22949-22949/com.example.wechat i/xbh: this $ 0
12-17 12: 02: 10.199 22949-22949/com.example.wechat i/xbh: Benutzername
12-17 12: 02: 10.199 22949-22949/com.example.wechat I/XBH: Benutzerpasswort
12-17 12: 02: 10.199 22949-22949/com.example.wechat I/XBH: $ Change
12-17 12: 02: 10.199 22949-22949/com.example.wechat i/xbh: serialversionuid
Sie können sehen, dass die beiden, die wir definierten Attributnamen, erscheinen, und die anderen drei sind enthalten, ohne sich um sie zu kümmern.
Holen Sie sich den Attributwert, holen Sie sich zuerst die GET -Methode und erhalten Sie ihn dann, indem Sie die GET -Methode aufrufen.
java.lang.reflect.method [] methode = Object.getClass (). getDeclaredMethods (); // Alle Methoden für (java.lang.reflect.method m: method) {System. if (m.getName (). startsWith ("get")) {Objekt o = null; try {o = m.invoke (Objekt); } catch (illegalAccessException | invocationTargetException e) {e.printstacktrace (); } if (o! = null &&! ". }} Ausgabe
12-17 12: 09: 33.429 29677-29677/com.example.wechat i/xbh: xu fenglai
12-17 12: 09: 33.429 29677-29677/com.example.wechat i/xbh: 1596666
Das, wenn Aussage die Methode ist, um den Beginn von GET zu erhalten
In Versuch führen diese Methode aus und geben den Rückgabewert in o
Nicht abrufen Attributwerte über die GET -Methode
java.lang.reflect.field fi = null; // das Attribut try {fi = Object.getClass (). getDeclaredfield ("Benutzername");} catch (NoSuchfieldException E) {E.printstacktrace ();} fi.setaccessible (true). Oder Ausgabe
12-17 12: 17: 34.419 4732-4732/com.example.wechat i/xbh: xu fenglai
Sie können es direkt durch die GetDeclaredfield -Methode erhalten (beachten Sie, dass sie sich von der oben genannten GetDeclaredfields -Methode unterscheidet). Wenn Ihr Attribut jedoch privat ist, können Sie definitiv nicht darauf zugreifen, damit Sie darauf zugreifen können, indem Sie dieses Attribut an die Öffentlichkeit festlegen (setAccessible).
Wenn Sie JSON -Daten erhalten, müssen Sie außerdem kein Objekt darin analysieren und es einfach in eine Karte umwandeln.
Zum Beispiel
{"code":0,"list":[{"userName":"3294727437","userPassword":"xbh1","userAvatar":"https://img1.imgtn.bdimg.com/it/u/u003d37460727/u0026gp/u003d0.jpg"}]}
Sie erhalten die folgende Sammlung über JsonArray ("Liste") und dann ein einzelnes Objekt über Get (i). Tatsächlich wurde das Objekt am Anfang in eine Karte konvertiert. Überprüfen Sie es also sorgfältig. Daher besteht keine Notwendigkeit, Attribute zu reflektieren und zu erhalten. Sie können sich direkt in eine Karte verwandeln, um Daten abzurufen.
wie
Karte <string, string = ""> map = (map <string, string = "">) u; map.get ("useravatar"); </string,> </string,>Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über Java Reflection, um einen Objekt -Attribut -Wert -Code -Analyse zu erhalten. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!