一个demo:
通过反射,将子类和父类中的属性值替换掉。
1.一个子类和一个父类:
public class BaseVo {
private Boolean canCheck = true;
public Boolean getCanCheck() {
return canCheck;
}
public void setCanCheck(Boolean canCheck) {
this.canCheck = canCheck;
}
}
public class SaaSVo extends BaseVo {
private Boolean flag = true;
public Boolean getFlag() {
return flag;
}
public void setFlag(Boolean flag) {
this.flag = flag;
}
}
核心方法:
public void getRef() throws Exception {
SaaSVo saaSVo = new SaaSVo();
//反射获取类
Class clazz = saaSVo.getClass();
while (clazz != null) {
//反射获取类属性
Field[] fields = clazz.getDeclaredFields();
try {
for (Field field : fields) {
//获取属性的描述符
PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
//获取写入属性值的方法
Method setMethod = pd.getWriteMethod();
//获取属性的值
Field singleConfigField = clazz.getDeclaredField(field.getName());
//将私有属性设置为公开
singleConfigField.setAccessible(true);
//获取属性值
Object value = singleConfigField.get(saaSVo);
//demo展示,将value取反
value = !(Boolean) value;
//将值写入
if (value != null) {
setMethod.invoke(saaSVo, value);
}
}
} catch (Exception e) {
throw new Exception(e);
}
//获取父类
clazz = clazz.getSuperclass();
}
System.out.println("saas:" + saaSVo.getFlag());
System.out.println("base:" + saaSVo.getCanCheck());
}
最终输出的对象属性值为false