как изменить значение атрибута с помощью отражения - PullRequest
1 голос
/ 13 декабря 2010

возможно ли изменить значение атрибута класса с помощью отражения.

ниже - мой класс: -

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переменная, использующая отражениекак я знаю, как вызывать методы, но как это сделать .. ???

Ответы [ 2 ]

7 голосов
/ 13 декабря 2010
Field field = LoggerManager.class.getDeclaredField("_instance");
field.setAccessible(true);
field.set(null, new NewLoggerManager());
  • первая строка получает определение Field для поля _instance.Использование «объявленного» метода, потому что он также может получать приватные поля
  • , что делает поле доступным для отражающих операций, даже если это невозможно из-за его видимости.
  • установка нового объекта.Передача null в качестве целевого объекта, потому что поле static
0 голосов
/ 13 декабря 2010

Я понятия не имею, почему вы должны делать это таким образом, и в основном @Bozho предоставил вам правильный ответ, но я хотел бы предложить избегать таких ловушек.В этом случае вам лучше использовать внедрение зависимостей, чтобы оно стало более понятным и приятным и сделало всю работу за вас.Попробуйте прочитать о GUICE .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...