повторно инициализируйте статические переменные класса до их исходных значений java

#java #static #initialization

#java #статические #инициализация

Вопрос:

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

Комментарии:

1. Насколько мне известно, к сожалению, Java API не поддерживает ничего, что повторно инициализировало бы переменные. Вы должны сделать это самостоятельно.

Ответ №1:

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

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

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

...

// Reset parameters
controlParams = new ControlParams();
  

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

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

Комментарии:

1. Согласен. Определенно необходимо создать эти переменные экземпляра. Это не имеет смысла как статический материал.

2. Если он изменяемый, вероятно, не имеет смысла быть статичным. ( 1)

3. Верно. Я просто подумал, что, поскольку его переменные изначально были статическими, он бы занялся большим рефакторингом, если controlParams бы не был статичным. 🙂

Ответ №2:

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