1

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

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

我当然可以轻松地在每个范围的最后一行添加一个重置,但是有没有在 MyClass 中实现的任何编程方式来实现这一点?

谢谢

4

1 回答 1

1

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

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

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

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

于 2013-10-21T00:56:36.373 回答