Às vezes, você sabe o que está dentro desse objeto, mas, por vários motivos, não pode convertê -lo em um objeto. Você só quer simplesmente extrair algumas coisas desse objeto. Você precisa usar a reflexão neste momento.
Se sua aula se parece com isto:
classe privada user {string userName; string userPassword; public string getUserName () {return userName;} public void setUserName (string userr name) {this.username = userName;} public string getUserPassword () {returnpasspord;} public void SetUsPassword (string «NOVO, atribuímos valor e transformamos para cima em objeto
Usuário do usuário = novo user (); user.setUserName ("xu fenglai"); user.setUserpassword ("1596666"); objeto objeto = user;Obtenha o nome do atributo e salve -o em uma matriz
java.lang.reflect.field [] campos = object.getClass (). getDecLaredFields (); para (java.lang.reflect.field f: campos) {log.i ("xbh", f.getname ());}Saída
12-17 12: 02: 10.199 22949-22949/com.example.wechat i/xbh: este $ 0
12-17 12: 02: 10.199 22949-22949/com.example.wechat i/xbh: nome de usuário
12-17 12: 02: 10.199 22949-22949/com.example.wechat i/xbh: userpassword
12-17 12: 02: 10.199 22949-22949/com.example.wechat i/xbh: $ alteração
12-17 12: 02: 10.199 22949-22949/com.example.wechat i/xbh: serialversion
Você pode ver que os dois nomes de atributos que definimos aparecem e os outros três estão incluídos sem se preocupar com eles.
Obtenha o valor do atributo, primeiro obtenha o método GET e, em seguida, obtenha -o chamando o método get.
java.lang.reflect.method [] method = object.getClass (). getDecLaredMethods (); // obtenha todos os métodos para (java.lang.reflect.method m: método) {System. <em> out </em> .println (m.getName ()); if (m.getName (). startSwith ("get")) {objeto o = null; tente {o = m.invoke (objeto); } catch (ilegalAccessException | InvocationTargeTexception e) {E.PrintStackTrace (); } if (o! = null &&! "". Equals (o.toString ())) {log.i ("xbh", o.toString ()); }} Saída
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: 15966666
Que se a declaração é o método para obter o início de obter
Invoke in Try Executa este método e coloca o valor de retorno em O
Não obtendo valores de atributo através do método get
java.lang.reflect.field fi = null; // obtenha o atributo tente {fi = object.getclass (). getDecaredfield ("nome de usuário");} catch (nosuchfieldException e) {e.printStacktrace (); fi.setCessible (true) // define o acesso ao accessão (); {Log.i ("xbh", fi.get (object) .toString ());} catch (ilegalAccessException e) {E.PrintStackTrace ();} Saída
12-17 12: 17: 34.419 4732-4732/com.example.wechat i/xbh: xu fenglai
Você pode obtê -lo diretamente através do método GetDecLaredField (observe que ele é diferente do método getDecLaredFields acima). Mas se o seu atributo for privado, você definitivamente não poderá acessá -lo, para que possa acessá -lo definindo esse atributo para o público (SetAccessible).
Além disso, se você estiver recebendo dados JSON, não precisará analisar um objeto, basta transformá -los em um mapa.
por exemplo
{"code":0,"list":[{"userName":"3294727437","userPassword":"xbh1","userAvatar":"https://img1.imgtn.bdimg.com/it/u/u003d37460727/u0026gp/u003d0.jpg"}]}
Você recebe a seguinte coleção através do JsonArray ("Lista") e, em seguida, obtém um único objeto através do get (i). De fato, o objeto no início foi convertido em um mapa; portanto, verifique com cuidado. Portanto, não há necessidade de refletir e obter atributos. Você pode se transformar diretamente em um mapa para recuperar dados.
como
Mapa <string, string = ""> map = (map <string, string = "">) u; map.get ("userAvatar"); </string,> </string,>Resumir
O exposto acima é todo o conteúdo deste artigo sobre a reflexão Java para obter um atributo de objeto Value Code Parsing. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!