是否可以使用反射更改类的属性值。
下面是我的班级: -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
是否可以这样做,因为我知道如何调用方法,但如何做到这一点.. ???
答案 0 :(得分:7)
Field field = LoggerManager.class.getDeclaredField("_instance");
field.setAccessible(true);
field.set(null, new NewLoggerManager());
Field
字段的_instance
定义。使用“声明”方法,因为它也能够获得私有字段null
作为目标对象传递,因为该字段为static
答案 1 :(得分:0)
我不知道为什么你需要这样做,基本上@Bozho已经为你提供了正确的答案,但我想建议避免这样的陷阱。在这种情况下,您最好使用依赖注入,因此它变得更加清晰和美观,并且将为您完成工作。试着阅读GUICE。