-
测试部分代码
-
运行效果
-
实体类部分
-
关键部分代码
测试部分代码:
import com.LingDr.entity.Student;
import org.junit.Test;
import static com.LingDr.utils.SetPropertyInfo.setPropertyInfo;
/**
* @Author: LI_Lingfei
* @CreateTime: 2021-01-09 13:09
*/
public class TT {
@Test
public void test1() {
System.out.println("这是第一个测试打印");
Student student = (Student) setPropertyInfo(new Student(), "grade.gradeName", "这是班级名称");
System.out.println(student);
System.out.println("\n-----分割红线------\n");
}
@Test
public void test2() {
System.out.println("这是第二个测试打印");
Student student = new Student();
setPropertyInfo(student, "grade.school.schoolName", "这是学校名称");
setPropertyInfo(student, "grade.gradeName", "这是班级名称");
System.out.println(student);
}
}
运行效果:
实体类部分
/**
* 学生类
* @Author: LI_Lingfei
* @CreateTime: 2021-01-09 13:14
*/
public class Student {
private String studentName;
private Grade grade;
/**
* 其它get、set等等
*/
}
/**
* 班级类
* @Author: LI_Lingfei
* @CreateTime: 2021-01-09 13:15
*/
public class Grade {
private String gradeName;
private School school;
//get.set等
}
/**
* 学校类
* @Author: LI_Lingfei
* @CreateTime: 2021-01-09 13:14
*/
public class School {
private String schoolName;
//get.set等
}
关键部分代码:
package com.lingDream.utils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import static com.lingDream.utils.ObjectUtils.newObject;
import static com.lingDream.utils.strUtil.StringUtils.get_set;
/**
* @Author: LI_Lingfei
* @CreateTime: 2021-01-08 20:11
*/
public class SetPropertyInfo {
public static Object setPropertyInfo(Object object, String str, String val) {
String[] split = str.split("[.]");
List<String> list = new ArrayList<>();
for (String s : split) {
list.add(s);
}
return superSetPropertyVal(object, list, val);
}
/**
* 超级属性赋值器
*
* @param object
* @param list
* @param val
*/
public static Object superSetPropertyVal(Object object, List<String> list, String val) {
Class<?> aClass = object.getClass();
String s = list.get(0);
String set = get_set(list.get(0), "set");
String get = get_set(list.get(0), "get");
try {
Field declaredField = aClass.getDeclaredField(s);
Class<?> type = declaredField.getType();
Object objVal = aClass.getMethod(get).invoke(object);
if (objVal == null) objVal = newObject(type);
if (list.size() == 1) objVal = val;
aClass.getMethod(set, type).invoke(object, objVal);
if (list.size() > 1) {
list.remove(0);
superSetPropertyVal(objVal, list, val);
}
return object;
} catch (Exception e) {
}
return object;
}
}