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

下面是我的课:-

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;
    }
}


我想使用反射更改_instance变量的值。

基本上我想将相同的值更改为_instance = new NewLoggerManager();

前提是NewLoggerManager extends LoggerManager

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

最佳答案

Field field = LoggerManager.class.getDeclaredField("_instance");
field.setAccessible(true);
field.set(null, new NewLoggerManager());



第一行获取Field字段的_instance定义。使用“声明的”方法,因为它也能够获取私有字段
将字段设置为可进行反射操作,即使由于可见性也无法做到。
设置一个新对象。将null作为目标对象传递,因为该字段是static

08-25 20:15