2 回答

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
我不相信有任何方法可以“強(qiáng)制”子類調(diào)用方法,但您可以嘗試某種模板方法方法:
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是入口點(diǎn),調(diào)用抽象方法bar然后調(diào)用私有qux方法,這意味著任何子類都遵循模板模式。然而,這當(dāng)然不是靈丹妙藥——一個(gè)子類可以簡單地忽略 public method。

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
您可以創(chuàng)建一個(gè)ExecutorCloseable
實(shí)現(xiàn)該[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 {
//...
}
}
希望它有意義,我真的不知道你如何調(diào)用這些方法,也不知道你如何創(chuàng)建類。但是,嘿,這是一個(gè)嘗試:)
不過,要使其起作用,finish()方法Foo應(yīng)該是protectedor public(推薦第一個(gè))。
添加回答
舉報(bào)