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