원리: Java의 리플렉션은 속성의 이름을 얻은 다음 호출을 통해 클래스의 메서드를 호출할 수 있습니다.
예를 들어 userName이라는 속성이 있고, 이 클래스는 getUserName이라는 메서드를 작성하며, 호출을 통해 getUserName 메서드가 호출됩니다.
코드는 다음과 같습니다
다음과 같이 코드 코드를 복사합니다 .
import java.lang.reflect.Field;
import java.lang.reflect.Method;
java.util.HashMap 가져오기;
java.util.Map 가져오기;
공개 클래스 ParameterBase
{
/**
* 클래스 필드 및 값 맵 가져오기
* @반품
*/
공용 Map<String, String> getClassInfo()
{
Map<String,String> fieldsAndValues = new HashMap<String, String>();
필드 [] 필드 = this.getClass().getDeclaredFields();
for(int i=0; i< fields.length; i++)
{
필드 f = 필드[i];
문자열 값 = getFieldValue(this,f.getName()).toString();
fieldsAndValues.put(f.getName(),value);
}
fieldsAndValues를 반환합니다.
}
private String getFieldValue(객체 소유자, 문자열 fieldName)
{
returnokeMethod(owner, fieldName,null).toString();
}
/**
*
* 특정 Field의 getField 메소드 실행
*
* @param 소유자 클래스
* @param fieldName 클래스의 속성 이름
* @param 인수 매개변수, 기본값은 null입니다.
* @반품
*/
개인 객체 호출 방법(객체 소유자, 문자열 필드 이름, 객체[] args)
{
클래스<? 확장 객체> ownerClass = owner.getClass();
//필드명 -> 필드명
String methodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
메소드 메소드 = null;
노력하다
{
method = ownerClass.getMethod("get" + methodName);
}
잡기(SecurityExceptione)
{
//e.printStackTrace();
}
잡기(NoSuchMethodExceptione)
{
// e.printStackTrace();
반품 "";
}
//getMethod 호출
노력하다
{
return method.invoke(owner);
}
잡기 (예외 e)
{
반품 "";
}
}
}
ParameterBase를 상속하는 User 클래스를 작성하고 테스트 코드를 작성합니다.
다음과 같이 코드 코드를 복사합니다 .
공용 클래스 사용자가 ParameterBase를 확장합니다.
{
문자열 사용자 이름;
문자열 passWorld;
공개 문자열 getUserName()
{
사용자 이름을 반환합니다.
}
공개 무효 setUserName(문자열 사용자 이름)
{
this.userName = 사용자이름;
}
공개 문자열 getPassWorld()
{
패스월드 반환;
}
공공 무효 setPassWorld(문자열 passWorld)
{
this.passWorld = 패스월드;
}
공개 정적 무효 메인(문자열[] 인수)
{
사용자 u = 새로운 사용자();
u.passWorld = "123";
u.userName = "아아아아아";
System.out.println(u.getClassInfo().toString());
}
}
프로그램 출력
다음과 같이 코드 코드를 복사합니다 .
{passWorld=123, 사용자 이름=aaaaa}