때로는이 객체 안에 무엇이 있는지 알고 있지만 여러 가지 이유로 객체로 변환 할 수 없습니다. 이 객체에서 몇 가지를 추출하고 싶습니다. 현재 반사를 사용해야합니다.
수업이 다음과 같이 보이는 경우 :
개인 클래스 사용자 {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 world.우리는 새로운 것을, 값을 할당하고, 위쪽으로 객체로 변모합니다.
user user = new user (); user.setusername ( "xu fenglai"); user.setuserpassword ( "1596666"); Object Object = User;
속성 이름을 가져 와서 배열에 저장하십시오.
java.lang.reflect.field [] fields = object.getClass (). getDeclaredFields (); for (java.lang.reflect.field f : fields) {log.i ( "xbh", f.getname ());}산출
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 : 사용자 이름
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 : $ 변경
12-17 12 : 02 : 10.199 22949-22949/com.example.wechat I/XBH : SerialVersionUid
우리가 정의한 두 속성 이름이 나타나고 다른 세 가지 이름은 걱정하지 않고 포함되어 있음을 알 수 있습니다.
속성 값을 가져오고 먼저 GET 메소드를 가져온 다음 get 메소드를 호출하여 가져옵니다.
java.lang.reflect.method [] method.getClass (). getDeclaredMethods (); // (java.lang.reflect.method m : method) {system. <em> out </em> .println (m.getName ()); if (m.getName (). startSwith ( "get")) {Object o = null; {o = M.invoke (Object); } CATCH (불법 행사 exception | invocationTargeteXception e) {e.printstacktrace (); } if (o! = null &&! "". }} 산출
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의 시작을 얻는 방법입니다.
시도 시도이 메소드를 실행하고 반환 값을 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 (불법 행위 지출 E e) {e.printstacktrace ();} 산출
12-17 12 : 17 : 34.419 4732-4732/com.example.wechat I/XBH : Xu Fenglai
getDeclaredfield 메소드를 통해 직접 얻을 수 있습니다 (위의 GetDeclaredFields 메소드와 다릅니다). 그러나 속성이 비공개 인 경우 분명히 액세스 할 수 없으므로이 속성을 공개 (setAccessible)로 설정하여 액세스 할 수 있습니다.
또한 JSON 데이터를 얻는 경우 객체를 구문 분석 할 필요가 없으며 맵으로 변환하십시오.
예를 들어
{ "code": 0, "list": [{ "username": "3294727437", "UserPassword": "xbh1", "useravatar": "https://img1.imgtn.bdimg.com/it/u003d37460727/u0026gp/u003d03d03d03d03d03d03d03d03d03dpg.
JSONARRAY ( "List")를 통해 다음 컬렉션을받은 다음 get (i)를 통해 단일 객체를 얻습니다. 실제로, 시작의 객체는지도로 변환되었으므로 조심스럽게 확인하십시오. 따라서 속성을 반영하고 얻을 필요가 없습니다. 데이터를 검색하기 위해 맵으로 직접 변환 할 수 있습니다.
좋다
map <string, string = ""> map = (map <string, string = "">) u; map.get ( "useravatar"); </string,> </string,>
요약
위는 객체 속성 값 코드 구문 분석을 얻기 위해 Java 반사에 대한이 기사의 모든 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!