利用反射既可以获取也可以写入,首先咱们先写几个获取的例子。
一:利用反射修改各数据(利用resultField.set修改)
首先定义实体类
public class Dog {
    private String dogUser;
    private int age;
把DogUser的"hahaha"改为"geggegegege"
Dog dog = new Dog();
dog.setAge(21);
dog.setDogUser("hahaha");
Object name = getValueByKey(dog, "dogUser");
System.out.println("获取到的属性名dogUser:"+name);
利用反射修改属性的工具类
public static <T> Object getValueByKey(T t, String key) {
        Class clazz = t.getClass();
        Field[] fields = clazz.getDeclaredFields();
        Field resultField = Arrays.stream(fields)
                .filter(field -> field.getName().equals(key))
                .findFirst()
                .get();
        Object obj = null;
        resultField.setAccessible(true);
        try {
            //把dogUser属性值从hahaha改为geggegegege
            resultField.set(t,"geggegegege");
            obj = resultField.get(t);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return obj;
    }
测试结果:

二:利用反射获取各种形式的数据
首先定义实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Person {
 
    private String name = "zhangsan";
 
    private byte sex = 1;
 
    private int age = 18;
 
    private String introduce = "niuBility";
}
在定义一个接口常量
public interface Constant {
 
    int CONFIG_INT1 = 1;
 
    int CONFIG_INT2 = 2;
 
    int CONFIG_INT3 = 3;
 
    String CONFIG_STRING1 = "1";
 
    String CONFIG_STRING2 = "2";
 
    String CONFIG_STRING3 = "3";
}
1:获取单个对象的所有键值对(变量名-变量值)
通过泛型参数限定传入一个对象,该方法传入一个对象,返回该对象所有的属性-值。
注意:这里Collectors.toMap(key,value)中的value值不能为空,若对象属性值存在为空的情况,则会抛出空指针异常,查看t



















