Java,在对象的作用域结束时执行方法

2022-09-03 01:29:45

我有一个具有特定状态的对象。对象被传递,其状态被暂时改变。像这样:

public void doSomething(MyObject obj) {
    obj.saveState();
    obj.changeState(...);
    obj.use();
    obj.loadState();
}

在C++在构造和析构时,可以使用对象的作用域来运行一些代码,例如

NeatManager(MyObject obj) { obj.saveState(); }
~NeatManager() { obj.loadState(); }

并称它为

void doSomething(MyObject obj) {
    NeatManager mng(obj);
    obj.changeState();
    obj.use();
}

这简化了工作,因为保存/加载与对象的作用域绑定。在Java中可以做这样的事情吗?有没有办法在对象超出其声明范围时调用方法?我不是在谈论“破坏”(垃圾回收),我对范围感兴趣。NeatManagerfinalize()

谢谢


答案 1

不,没有这样的事情。最接近的可能是尝试/最终阻止:

try
{
    obj.changeState(...);
    obj.use();
}
finally
{
    obj.loadState();
}

这可确保即使在引发异常或存在早期 .loadState()return


答案 2

不,没有这样的事情。你最接近的是尝试/最后。

在 C# 中有一个语句,它在末尾执行一个方法:usingDispose

using (Stream x = ...)
{
} // x.Dispose() is called here, in a finally block

Java 7有可能获得类似的东西,但我认为还没有任何事情是一成不变的。