我有一个抽象类Task
,具有以下两种方法execute()
和finish()
:
abstract class Task {
abstract void execute();
private void finish() {
// Do something...
}
}
如何确保execute()
的子类中的重载方法Task
隐式调用finish()
作为最后一条语句?
您可以创建实现ExecutorCloseable
接口的[AutoCloseable]
类,例如:
[AutoCloseable]
您可以这样称呼(愚蠢的public class ExecutorCloseable extends Foo implements AutoCloseable
{
@Override
public void execute()
{
// ...
}
@Override //this one comes from AutoCloseable
public void close() //<--will be called after execute is finished
{
super.finish();
}
}
示例:]:>
main()
希望这很有道理,我真的不知道您如何调用这些方法,也不知道如何创建类。嘿,这是一个尝试:)
为此, public static void main(String[] args)
{
try (ExecutorCloseable ec = new ExecutorCloseable ())
{
ec.execute();
} catch(Exception e){
//...
} finally {
//...
}
}
上的finish()
方法应为Foo
或protected
(建议使用第一个)。
我不相信有任何'强迫'子类调用方法的方法,但是您可以尝试某种template method