Java 반사는 메서드 이름에 따라 다른 메서드를 동적으로 호출합니다(예시)
모델 클래스, 일반 모델과 동일
public class Person {
private String name;
private int age;
private String address;
private String phoneNumber;
private String sex;
public String getName() {
return name;
}
// get 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.
private Person initPerson() {
Person p = new Person();
p.setName("name");
p.setAge(21);
p.setAddress("this is my addrss");
p.setPhoneNumber("12312312312");
p.setSex("f");
return p;
}
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Test test = new Test();
Person p = test.initPerson();
List<String> list = new ArrayList<String>();
// Add all get method.
// There is no ‘()' of methods name.
list.add("getName");
list.add("getAge");
list.add("getAddress");
list.add("getPhoneNumber");
list.add("getSex");
for (String str : list) {
// Get method instance. first param is method name and second param is param type.
// Because Java exits the same method of different params, only method name and param type can confirm a method.
Method method = p.getClass().getMethod(str, new Class[0]);
// First param of invoke method is the object who calls this method.
// Second param is the param.
System.out.println(str + "(): Get Value is " + method.invoke(p, new Object[0]));
}
}
}
샘플은 데이터베이스에서 얻은 필드에 따라 대상에서 상응하는 값을 두루 찾을 수 있다위의 그 방법은list에 get 방법명을 추가해야만 상응하는 get 방법명에 따라 값을 얻을 수 있습니다. 만약에 프론트에서 전송된 것이 단지 하나의 속성명이라면 우리는 상응하는 get 방법으로 전환해야 합니다. 번거롭습니다.
public static void getValueByProperty(Person p, String propertyName) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
// get property by the argument propertyName.
PropertyDescriptor pd = new PropertyDescriptor(propertyName, p.getClass());
Method method = pd.getReadMethod();
Object o = method.invoke(p);
System.out.println("propertyName: " + propertyName + "\t value is: " + o);
}
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, IntrospectionException {
Test test = new Test();
Person p = test.initPerson();
// get all properties.
Field[] fields = p.getClass().getDeclaredFields();
for (Field field : fields) {
getValueByProperty(p, field.getName());
}
}
이렇게 하면 전송된propertyName을 통해 대응하는value 값을 얻을 수 있습니다.이상의 이 자바 반사는 서로 다른 방법명에 따라 동적으로 서로 다른 방법(실례)을 호출하는 것이 바로 편집자가 여러분에게 공유한 모든 내용입니다. 여러분에게 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.