Parfois, vous savez ce qui se trouve à l'intérieur de cet objet, mais pour diverses raisons, vous ne pouvez pas le convertir en objet. Vous voulez simplement extraire certaines choses de cet objet. Vous devez utiliser la réflexion pour le moment.
Si votre classe ressemble à ceci:
classe privée utilisateur {String username; String UserPassword Userpass; public String getUserName () {return username;} public void setUserName (String username) {this.userName = username;} public string getUserPassword () {return userpassword;} public void SetUserPassword (String Userpassword) {this.USERPASNous ne faisons un, attribuez la valeur et transformons vers le haut en objet
User user = new User (); user.seserName ("xu Fenglai"); user.seTUserPassword ("1596666"); objet objet = utilisateur;Obtenez le nom d'attribut et enregistrez-le dans un tableau
java.lang.reflect.field [] fields = object.getClass (). getDeclaredFields (); for (java.lang.reflect.field f: fields) {log.i ("xbh", f.getname ());}Sortir
12-17 12: 02: 10.199 22949-22949 / com.example.wechat i / xbh: ce 0 $
12-17 12: 02: 10.199 22949-22949 / com.example.wechat i / xbh: nom d'utilisateur
12-17 12: 02: 10.199 22949-22949 / com.example.wechat i / xbh: userpass mot
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
Vous pouvez voir que les deux noms d'attribut que nous avons définis apparaissent, et les trois autres sont inclus sans s'en soucier.
Obtenez la valeur d'attribut, obtenez d'abord la méthode GET, puis obtenez-le en appelant la méthode GET.
java.lang.reflect.method [] méthode = object.getClass (). getDeclaredMethods (); // obtenir toutes les méthodes pour (java.lang.reflect.method m: méthode) {System. <em> out </em> .println (m.getName ()); if (m.getName (). startSwith ("get")) {objet o = null; essayez {o = M.Invoke (objet); } catch (illégalaccessException | invocationTargetException e) {e.printStackTrace (); } if (o! = null &&! "". equals (o.toString ())) {log.i ("xbh", o.toString ()); }} Sortir
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
Que si la déclaration est la méthode pour obtenir le début de Get
Invoquer dans TRYS exécute cette méthode et met la valeur de retour en o
Ne pas obtenir de valeurs d'attribut via la méthode GET
java.lang.reflect.field fi = null; // Obtenez l'attribut try {fi = object.getClass (). getDeclaredField ("username");} catch (NosuchFieldException e) {e.printStackTrace ();} fi.setaccessible (true); // définir les permis d'accès de l'objet actuel à l'attaque privé pour l'attribut {Log.i ("xbh", fi.get (objet) .toString ());} catch (illégalaccessException e) {e.printStackTrace ();} Sortir
12-17 12: 17: 34.419 4732-4732 / com.example.wechat i / xbh: Xu Fenglai
Vous pouvez l'obtenir directement via la méthode GetDeclaredField (notez qu'il est différent de la méthode GetDeclaredFields ci-dessus). Mais si votre attribut est privé, vous ne pourrez certainement pas y accéder, vous pouvez donc y accéder en définissant cet attribut au public (setAccessible).
De plus, si vous obtenez des données JSON, vous n'avez pas besoin de analyser un objet, de le transformer simplement en carte.
Par exemple
{"code": 0, "liste": [{"nom d'utilisateur": "3294727437", "userpassword": "xbh1", "useraVatar": "https://img1.imgtn.bdimg.com/it/u/U003D37460727/U0026gp/U003d0.jpg"}]}
Vous obtenez la collection suivante via JSONArray ("List"), puis obtenez un seul objet via Get (i). En fait, l'objet au début a été converti en carte, alors vérifiez-le avec soin. Par conséquent, il n'est pas nécessaire de réfléchir et d'obtenir des attributs. Vous pouvez vous transformer directement en carte pour récupérer les données.
comme
Map <string, string = ""> map = (map <string, string = "">) u; map.get ("useraVatar"); </ string,> </ string,>Résumer
Ce qui précède est tout le contenu de cet article sur Java Reflection pour obtenir un analyse de code de valeur d'attribut d'objet. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!