Java Сброс частного статического члена, когда все экземпляры класса находятся вне области видимости
Здравствуйте, я хочу дать статический закрытый член для моего класса, чтобы отслеживать количество созданных объектов класса, но я также хочу избавиться от него и сбросить, когда все экземпляры класса находятся вне области видимости. В моем случае все проще, потому что мне не нужно обрабатывать вложенные области видимости. т.е. все экземпляры создаются на одном уровне:
if (true) {
MyClass(); // Count 1
MyClass(); // Count 2
}
if (true) {
MyClass(); // Count 1
MyClass(); // Count 2
}
Конечно, я могу легко добавить сброс к последней строке каждой области, но есть ли какой-нибудь программный способ для реализации в MyClass?
Спасибо
1 ответ
Java не предлагает надежного способа точно знать, когда все объекты выходят из области видимости. Кроме того, просто добавив вызов MyClass.staticReset()
до конца каждая область действия может не сработать, если функция возвращается до завершения области действия или выдает исключение.
Надежным решением было бы добавить вызов к finally
блок, содержащий область ваших переменных:
if (someConditionIsTrue) try {
MyClass(); // Count 1
MyClass(); // Count 2
} finally {
MyClass.staticReset();
}
Обратите внимание, что сохранение счета в статической памяти может стать проблематичным в параллельных средах. Лучшим вариантом было бы создать некоторый объект, представляющий "область" явно, зарегистрировать экземпляры в нем, а затем вызвать reset()
на это в finally
блок.