如何使用反射更改属性值

M.J*_*.J. 2 java reflection

是否可以使用反射更改类的属性值.

以下是我的班级: -

public class LoggerManager {

    private static LoggerManager _instance = new LoggerManager();

    private LoggerManager() {
    }

    public static LoggerManager getInstance() {
            return _instance; 
    }

    public Logger getLogger(String FQCN) {
        Logger logger =  Logger.getLogger(FQCN);
        logger.setLevel(Level.INFO);
        return logger;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想_instance用反射改变变量的值..

基本上我想改变相同的值_instance = new NewLoggerManager();,

提供的 NewLoggerManager extends LoggerManager

是否有可能这样做,因为我知道如何调用方法,但如何做到这一点.. ???

Boz*_*zho 8

Field field = LoggerManager.class.getDeclaredField("_instance");
field.setAccessible(true);
field.set(null, new NewLoggerManager());
Run Code Online (Sandbox Code Playgroud)
  • 第一行获得Field_instance字段的定义.使用"声明"方法,因为它也能够获得私有字段
  • 将该字段设置为可以进行反射操作,即使由于其可见性而无法实现这一点.
  • 设置一个新对象.null作为目标对象传递,因为该字段是static