实现方法
public static <T> Object getFieldValue(T t, String filedName) {
try {
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(filedName, t.getClass());
Method readMethod = propertyDescriptor.getReadMethod();
return readMethod.invoke(t);
} catch (IllegalAccessException | InvocationTargetException | IntrospectionException e) {
throw new RuntimeException(e);
}
}
public static <T> void setFieldValue(T t, String filedName, Object value) {
try {
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(filedName, t.getClass());
Method writeMethod = propertyDescriptor.getWriteMethod();
if (writeMethod != null) {
writeMethod.invoke(t, value);
} else {
System.out.println("not found write method");
}
} catch (IllegalAccessException | InvocationTargetException | IntrospectionException e) {
throw new RuntimeException(e);
}
}
UT测试
@Test
public void testGetFieldValue() {
User user1 = new User();
user1.setName("user1");
user1.setAge("19");
user1.setNum("123456");
Assert.assertEquals("user1", ReflectUtils.getFieldValue(user1, "name"));
Assert.assertEquals("19", ReflectUtils.getFieldValue(user1, "age"));
Assert.assertEquals("123456", ReflectUtils.getFieldValue(user1, "num"));
}
@Test
public void testSetFieldValue() {
User user = new User();
ReflectUtils.setFieldValue(user, "name", "user1");
ReflectUtils.setFieldValue(user, "age", "19");
ReflectUtils.setFieldValue(user, "num", "123456");
Assert.assertEquals("user1", user.getName());
Assert.assertEquals("19", user.getAge());
Assert.assertEquals("123456", user.getNum());
}
@Data
static class User {
private String name;
private String age;
private String num;
}
实践
Map<String, List<String>>
结构体内容的输出
User user1 = new User();
user1.setName("user1");
user1.setAge("19");
user1.setNum("123456");
List<String> strings = Arrays.asList("name", "age", "num");
List<Object> collect = strings.stream().map(a -> ReflectUtils.getFieldValue(user1, a)).toList();
System.out.println(collect);
结果:
[user1, 19, 123456]
Map<String, List<String>>
结构体 转换为 对象类型
Map<String, List<String>> map = new HashMap<>();
map.put("name", Arrays.asList("name1", "name2", "name3"));
map.put("age", Arrays.asList("11", "23", "23"));
map.put("num", Arrays.asList("123", "234", "345"));
List<User> users = new ArrayList<>();
List<String> fields = new ArrayList<>(map.keySet());
int size = map.get(fields.get(0)).size();
for (int i = 0; i < size; i++) {
User user1 = new User();
for (String field : fields) {
String value = map.get(field).get(i);
ReflectUtils.setFieldValue(user1, field, value);
}
users.add(user1);
}
System.out.println(users);
结果:
[ReflectUtilsTest.User(name=name1, age=11, num=123),
ReflectUtilsTest.User(name=name2, age=23, num=234),
ReflectUtilsTest.User(name=name3, age=23, num=345)]