如何使用反射更改属性值

时间:2010-12-13 07:39:42

标签: 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;
    }
}

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

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

提供NewLoggerManager extends LoggerManager

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

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

我不知道为什么你需要这样做,基本上@Bozho已经为你提供了正确的答案,但我想建议避免这样的陷阱。在这种情况下,您最好使用依赖注入,因此它变得更加清晰和美观,并且将为您完成工作。试着阅读GUICE