[实践总结] Java实现 通过反射读取属性值和给属性赋值

实现方法

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)]

猜你喜欢

转载自blog.csdn.net/weixin_37646636/article/details/134840697
今日推荐