【Java反射(一)】获取及设置属性值
背景
反射说起来还是上学时候刚学java基础的时候写过单测,之后就再也没用过了,全还给老师了。最近在项目里遇到了一个场景,需要对多个类的相同字段进行相同的逻辑处理,而这些类有些已经继承了其他父类了。略一思考,封装一个方法,入参是Objec,通过反射获取相同的字段,进行业务逻辑处理。听起来是个可行方案,然后我就踩坑了,over。
获取属性值
非常巧,我要获取父类private的字段,怎么搞呢?获取字段之前先调用下面的方法就好了!
可以拿到属性字段了,下面获取 属性值
设置属性值
完整代码
public void getAndSetFieldValue(Object request) {
try {
Class requestClass = request.getClass();
//1. 获取属性值
Field departIdField = null;
//1.1 获取属性字段
try {
departIdField = requestClass.getDeclaredField("departId");
} catch (NoSuchFieldException e) {
departIdField = requestClass.getSuperclass().getDeclaredField("departId");
}
//1.2 获取属性值
departIdField.setAccessible(true);
Object departIdValueObj = departIdField.get(request);
//2. 设置属性值
Field officeCodeListField = null;
//2.1 获取属性字段
try {
officeCodeListField = requestClass.getDeclaredField("officeOrgCodeList");
} catch (Exception e) {
officeCodeListField = requestClass.getSuperclass().getDeclaredField("officeOrgCodeList");
}
//2.3 设置属性值
officeCodeListField.setAccessible(true);
officeCodeListField.set(request, Arrays.asList("123", "456"));
} catch (Exception e) {
// 异常处理
}
}
