是否可以使用反射来更改类的属性的值。
下面是我的课:-
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