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.
不,没有那样的.你最接近的是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有可能获得类似这样的东西,但我认为还没有任何东西可以用.