Bootstrap

反射 实现私有属性赋值

单元测试中涉及到了mock出了一个对象,需要实现注入,故编写方法实现:

public class Util {
    /**
     * 使用反射的方实现mock对象的注入
     * @param object
     * @param fieldName
     * @param value
     */
    public static void setFieldValueByFieldName(Object object, String fieldName, Object value) {
        try {
            // 获取obj类的字节文件对象
            Class c = object.getClass();
            // 获取该类的成员变量
            Field f = c.getDeclaredField(fieldName);
            // 取消语言访问检查
            f.setAccessible(true);
            // 给变量赋值
            f.set(object, value);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用:

public class A{
  private String str;
  private int num;
}
public class B{
A a=new A();
Util.setFieldValueByFieldName(a,"str","hello");
Util.setFieldValueByFieldName(a,"num",12);
}
;