private static void setProperty(Object Obj,BigDecimal amount) throws Exception {
//获取class 对象
Class cls = Obj.getClass();
Field[] fields = cls.getDeclaredFields();// 通过暴力反射获取字段
for (Field f : fields) {
f.setAccessible(true); // 设置些属性是可以访问的
Object val = f.get(Obj);// 得到此属性的值
System.out.println("name:" + f.getName() + "\t value = " + val);
String type = f.getType().toString();// 得到此属性的类型
if (type.endsWith("BigDecimal")) {
// 校验字段值
if (val instanceof BigDecimal) {
//判断原值是否为负数
if (((BigDecimal) val).signum() < 0) {
amount = amount.abs().negate();
}
//
if (((BigDecimal) val).signum() != 0) {
f.set(Obj, amount); // 给属性设值
}
}
}
}
}
Java反射机制设置类对象的属性值
于 2023-03-24 11:37:48 首次发布
该代码段展示了一个Java方法,通过反射获取并修改对象的私有属性,特别是当属性类型为BigDecimal时进行值的校验和更新。方法首先获取对象的Class对象,然后遍历并访问所有字段,检查字段类型是否为BigDecimal。如果字段值是负的BigDecimal,它会设置为相反数的绝对值;如果字段值不为零,则用传入的amount值替换字段值。
5731

被折叠的 条评论
为什么被折叠?



