有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用反射更改属性值

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

下面是我的课堂:-

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) 个答案

  1. # 1 楼答案

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

    我不知道你为什么需要这样做,基本上@Bozho已经给了你正确的答案,但我想建议你避免这样的陷阱。在这种情况下,您最好使用依赖项注入,这样它就变得更加清晰和友好,可以为您完成这项工作。试着读一下GUICE