利用反射既可以获取也可以写入,首先咱们先写几个获取的例子。
一:利用反射修改各数据(利用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改为geggegegegeresultField.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