목록 페이지의 필드는 사용자의 환경 설정에 따라 정렬 할 수 있어야하므로 각 사용자의 필드는 다른 순서에 해당합니다 (필드 순서는 데이터베이스에 저장됩니다). 데이터베이스에서 우리가 취한 값은 객체이지만 전경 전송 값은 Ajax 및 JSON 배열이므로 객체 간 JSON 변환 문제에 직면 해 있습니다. 1. 각 사용자의 필드 순서는 고정되지 않았으며 코드는 죽을 수 없습니다. 2. 사용자의 필드 순서에 따라 값을 얻습니다. 각 값을 판단하고 다른 방법을 호출하는 데 사용하는 경우 조건부 진술이 너무 많습니다. 그런 다음 나는 반사를 보았다.
모델 클래스, 일반 모델과 동일합니다
공개 클래스 사람 {개인 문자열 이름; 사적인 int 연령; 개인 문자열 주소; 개인 문자열 phoneNumber; 개인 문자열 섹스; 공개 문자열 getName () {return name; } // 다음은 생략 된 get and set 메소드입니다. } 테스트 클래스
import java.lang.reflect.invocationTargetexception; import java.lang.reflect.method; import java.util.arraylist; import java.util.list; public class test {// init person object. 개인 person initperson () {person p = new Person (); p.setName ( "이름"); P. 세트 (21); p.setAddress ( "이것은 내 addrss"); P.SetPhonEnumber ( "12312312312"); p.setsex ( "f"); 반환 p; } public static void main (string [] args)은 보안 exception, nosuchmethodexception, 불법 행위, 불법 행사, invocationTargetexception {test test = new test (); Person P = test.initperson (); List <string> list = new ArrayList <string> (); // 모든 get 메소드를 추가합니다. // 메소드 이름의 '()'가 없습니다. list.add ( "getName"); list.add ( "getage"); list.add ( "getAddress"); list.add ( "getphoneNumber"); list.add ( "getsex"); for (string str : list) {// 메소드 인스턴스를 얻습니다. 첫 번째 매개 변수는 메소드 이름이고 두 번째 Param은 Param Type입니다. // Java는 다른 매개 변수의 동일한 메소드를 종료하기 때문에 메소드 이름과 매개 변수 만 메소드를 확인할 수 있습니다. 메소드 메소드 = p.getClass (). getMethod (str, new Class [0]); // 호출 메소드의 첫 번째 매개 변수는이 메소드를 호출하는 객체입니다. // 두 번째 매개 변수는 매개됩니다. System.out.println (str + "() : get value는" + method.invoke (p, new Object [0]); }}}데이터베이스에서 얻은 필드를 사용하여 해당 값을 객체에서 얻을 수도 있습니다.
위의 메소드는 해당 GET 메소드 이름을 기반으로 값을 얻을 수 있도록 GET 메소드 이름을 목록에 추가해야합니다. 전경이 속성 이름이라면 해당 GET 메소드로 변환해야합니다.
public static void getValueByProperty (Person P, String PropertyName)는 IntrospectionException, IllegalArgumentException, IllegalAccessException, invocationTargeteXception {// 인수 속성에 의해 속성을 가져옵니다. PropertyDescriptor PD = New PropertyDescriptor (PropertyName, p.getClass ()); 메소드 메소드 = pd.getReadMethod (); Object o = method.invoke (p); System.out.println ( "PropertyName :" + propertyName + "/t 값은 :" + o); } public static void main (string [] args)은 보안 예상, nosuchmethodexception, 불법 행정 덱스크, 불법 행사, invocationTargetexception, introspectionException {test test = new test (); Person P = test.initperson (); // 모든 속성을 얻습니다. 필드 [] fields = p.getClass (). getDeclaredFields (); for (필드 필드 : 필드) {getValueByProperty (p, field.getName ()); }} 이러한 방식으로 전달 된 속성 이름을 통해 해당 값을 직접 얻을 수 있습니다.
위의 기사 Java Reflection은 다른 방법 이름에 따라 다른 방법 (예)을 동적으로 호출합니다. 나는 그것이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.