gpt4 book ai didi

当所有类实例超出范围时,Java 重置私有(private)静态成员

转载 作者:太空宇宙 更新时间:2023-11-04 07:19:47 24 4
gpt4 key购买 nike

嗨,我想为我的类提供一个静态私有(private)成员来跟踪创建的类对象的数量,但我也想在所有类实例超出范围时处理它并重置。对于我的情况来说事情更容易,因为我不必处理嵌套范围。即所有实例都是在同一级别创建的:

if (true) {
MyClass(); // Count 1
MyClass(); // Count 2
}
if (true) {
MyClass(); // Count 1
MyClass(); // Count 2
}

我当然可以轻松地将重置添加到每个作用域的最后一行,但是在 MyClass 中是否有任何编程方法可以实现此目的?

谢谢

最佳答案

Java 没有提供可靠的方法来准确了解所有对象何时超出范围。此外,如果函数在作用域结束之前返回,或者抛出异常,那么简单地在每个作用域末尾添加对 MyClass.staticReset() 的调用可能无法解决问题。

一个可靠的解决方案是将调用添加到包含变量范围的 finally block :

if (someConditionIsTrue) try {
MyClass(); // Count 1
MyClass(); // Count 2
} finally {
MyClass.staticReset();
}

请注意,在并发环境中,将计数保留在静态内存中可能会出现问题。更好的选择是创建一些显式表示“范围”的对象,向其注册实例,然后在 finally block 中对其调用 reset()

关于当所有类实例超出范围时,Java 重置私有(private)静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19484670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com