业务场景:
通过一个值(例如"name")拼接get方法,获取目标对象中属性为“name”的值;
通过一个值(例如"sex")拼接set方法,为目标对象中为"sex"的属性赋值;
代码实现:
测试对象(Object):
public class Student {
String name;
String sex;
//此处省略“get”与“set”方法的实现,自行代码实现或注解实现
}
取值(getter):
(注意异常的捕获和处理)
@SneakyThrows
public String dynamicObtainValue(String dataName, Student stu){
//载入目标对象的路径
Class<?> cls = Class.forName("com.aa.bb.Student");
//拼接出get方法
dataName = dataName.substring(0,1).toUpperCase() + dataName.substring(1);
String methodName = "get"+dataName;
//调用方法获取值
Method method = cls.getDeclaredMethod(methodName);
String name = (String)method.invoke(stu);
//返回结果
return name;
}
赋值(setter):
(注意异常的捕获和处理)
@SneakyThrows
public void assignment(String dataName, String content, Student stu){
Class<?> cls = Class.forName("com.aa.bb.Student");
dataName = dataName.substring(0,1).toUpperCase() + dataName.substring(1);
String methodName = "set"+dataName;
Method method = cls.getDeclaredMethod(methodName,String.class);
method.invoke(stu,content);
}
测试(test):
Student stu = new Student();
assignment("name","张三",stu);
assignment("sex","男",stu);
System.out.println("stu.name----->"+(dynamicObtainValue("name",stu)));
System.out.println("stu.sex----->"+(dynamicObtainValue("sex",stu)));