2 回答
TA贡献1725条经验 获得超7个赞
我不相信有任何方法可以“强制”子类调用方法,但您可以尝试某种模板方法方法:
abstract class Foo {
protected abstract void bar(); // <--- Note protected so only visible to this and sub-classes
private void qux() {
// Do something...
}
// This is the `public` template API, you might want this to be final
public final void method() {
bar();
qux();
}
}
publicmethod是入口点,调用抽象方法bar然后调用私有qux方法,这意味着任何子类都遵循模板模式。然而,这当然不是灵丹妙药——一个子类可以简单地忽略 public method。
TA贡献2003条经验 获得超2个赞
您可以创建一个ExecutorCloseable
实现该[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应该是protectedor public(推荐第一个)。
添加回答
举报