このオブジェクトの中にあるものを知っている場合がありますが、さまざまな理由で、オブジェクトに変換することはできません。このオブジェクトからいくつかのものを抽出するだけです。現時点では反射を使用する必要があります。
あなたのクラスが次のようになる場合:
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)私たちは新しいもの、値を割り当て、上向きにオブジェクトに変換します
user user = new user(); user.setusername( "xu fenglai"); user.setuserpassword( "1596666"); object object = user;
属性名を取得し、配列に保存します
java.lang.reflect.field [] fields = object.getClass()。getDeclaredFields();
出力
12-17 12:02:10.199 22949-22949/com.example.wechat i/xbh:これは0ドルです
12-17 12:02:10.199 22949-22949/com.example.wechat i/xbh:username
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:$ change
12-17 12:02:10.199 22949-22949/com.example.wechat i/xbh:serialversionuid
定義した2つの属性名が表示され、他の3つは心配することなく含まれていることがわかります。
属性値を取得し、最初にGETメソッドを取得し、GETメソッドを呼び出して取得します。
Java.lang.Reflect.Method [] Method = object.getClass()。getDeclaredMethods(); //すべてのメソッド(java.lang.reflt.m:method){system。<em> out </em> .println(m.getname()); if(m.getname()。startswith( "get")){object o = null; try {o = m.invoke(object); } catch(Illegalaccessexception | vocationTargetException e){e.printstacktrace(); } if(o!= null &&! ""。equals(o.toString())){log.i( "xbh"、o.toString()); }}出力
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
その声明は、getの始まりを取得する方法です
Invoke in Try Tryこのメソッドを実行し、戻り値をoに入れます
GETメソッドを使用して属性値を取得しません
Java.lang.Reflect.field fi = null; //属性を取得{fi = object.getClass()。getDeclaredfield( "username");} catch(nosuchfieldexception e){e.printstacktrace();} fi.setaccessible(true); {log.i( "xbh"、fi.get(object).toString());} catch(Illegalaccessexception e){e.printstacktrace();}出力
12-17 12:17:34.419 4732-4732/com.example.wechat i/xbh:xu fenglai
GetDeclaredFieldメソッドを使用して直接入手できます(上記のGetDeclaredFieldsメソッドとは異なることに注意してください)。しかし、あなたの属性がプライベートである場合、あなたは間違いなくそれにアクセスできないので、この属性をパブリックに設定することでアクセスできます(SetAccessable)。
さらに、JSONデータを取得している場合は、オブジェクトを解析する必要はありません。マップに変換するだけです。
例えば
{"code":0、 "list":[{"username": "3294727437"、 "userpassword": "xbh1"、 "useravatar": "https://img1.imgtn.bdimg.com/it/u/u/u003d37460727/u0026/u0026gp/
JsonArray( "List")を介して次のコレクションを取得し、get(i)で単一のオブジェクトを取得します。実際、最初のオブジェクトはマップに変換されたため、注意深く確認してください。したがって、属性を反映して取得する必要はありません。マップに直接変換してデータを取得できます。
のように
map <string、string = ""> map =(map <string、string = "">)u; map.get( "useravatar"); </string、> </string、>
要約します
上記は、Java Reflectionに関するこの記事のすべての内容で、オブジェクト属性値コードの解析を取得します。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!