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

Aki*_*oss 16 java destructor scope object

我有一个具有某种状态的物体.对象被传递,它的状态暂时改变.就像是:

public void doSomething(MyObject obj) {
    obj.saveState();
    obj.changeState(...);
    obj.use();
    obj.loadState();
}
Run Code Online (Sandbox Code Playgroud)

在C++中,可以使用对象的范围在构造和解析时运行一些代码,例如

NeatManager(MyObject obj) { obj.saveState(); }
~NeatManager() { obj.loadState(); }
Run Code Online (Sandbox Code Playgroud)

并称之为

void doSomething(MyObject obj) {
    NeatManager mng(obj);
    obj.changeState();
    obj.use();
}
Run Code Online (Sandbox Code Playgroud)

这简化了工作,因为保存/加载与NeatManager对象的范围绑定.是否有可能在Java中做这样的事情?有没有办法在对象超出声明范围时调用方法?我不是在谈论finalize()也不是"破坏"(垃圾收集),我对范围感兴趣.

谢谢

Mic*_*rdt 13

不,没有这样的事情.最接近的可能是try/finally块:

try
{
    obj.changeState(...);
    obj.use();
}
finally
{
    obj.loadState();
}
Run Code Online (Sandbox Code Playgroud)

这样可以确保loadState()即使抛出异常或提前执行也会调用它return.


Jon*_*eet 5

不,没有那样的.你最接近的是try/finally.

在C#中有using语句,它Dispose在最后执行一个方法:

using (Stream x = ...)
{
} // x.Dispose() is called here, in a finally block
Run Code Online (Sandbox Code Playgroud)

Java 7有可能获得类似这样的东西,但我认为还没有任何东西可以用.