повторно инициализировать статические переменные класса в их исходные значения Java - PullRequest
4 голосов
/ 02 ноября 2011

У меня есть класс, который имеет достаточное количество статических переменных, не все из которых инициализируются значениями по умолчанию (например, у меня есть логическое значение, которое я инициализирую в true, набор, который я инициализирую в новый Set () и т. Д. ). Этот класс чем-то похож на контроллер, который работает с другими классами. После того, как он завершил работу с классом, я хотел бы переинициализировать все его статические переменные в их исходные значения, используя (если он существует) что-то, что является частью java API, так что мне не нужно делать "reinitializeClassVariables" () "метод, содержащий около дюжины переменных, которые необходимо обновлять каждый раз, когда я делаю какие-либо изменения в статических переменных, объявленных в классе. Есть идеи?

Ответы [ 2 ]

7 голосов
/ 02 ноября 2011

После того, как он завершит работу с классом, я хотел бы повторно инициализировать все его статические переменные до их исходных значений

Серьезно звучит так, как будто лучше с экземпляром переменными. Затем вы можете просто создать новый экземпляр вашего класса (или класс, содержащий ваши параметры), используя new, и все переменные будут инициализированы в их начальные значения. Примерно так:

// All parameters (static if you so like)
static ControlParams controlParams = new ControlParams();

...

// Reset parameters
controlParams = new ControlParams();


что-то, что является частью java API, так что мне не нужно делать reinitializeClassVariables()

Нет, в API такого нет (на самом деле, это должно быть частью языковой спецификации, я считаю). Использование статических переменных в вашем случае просто очень плохой выбор.

2 голосов
/ 02 ноября 2011

Нет, ничего встроенного. Вы можете сделать что-то с помощью отражения или манипулирования байтовым кодом, но это не стоит и делает все более сложным. Может быть, вы можете преобразовать статические переменные в новый класс, а затем выполнить сброс с новым экземпляром «когда закончите».

...