假設我用下面的回調API工作:如何安全地裝飾現有的回調?
/**
* Registers a new action which will be run at some later time on
* some other thread, clearing any previously set callback action.
*
* @param callback an action to be run later.
* @returns the previously registered action.
*/
public Runnable register(Runnable callback);
我想註冊自己的行動,但我想保留任何一組行爲。換句話說,我想我的行動看起來像:
new Runnable() {
public void run() {
// do my work
originalCallback.run();
}
}
什麼是提供originalCallback
我Runnable
最乾淨的方式是什麼?
想到這些天真的解決方案會引入一個時間窗口,其中originalCallback
在調用回調時不可用,或者涉及一些複雜的鎖定。
當你說'先前註冊的動作',你的意思是'this'或'callback'? –
也不是傳遞給'register()'的前一個調用的'callback'。與Map.put()返回前一個值的方式相同。 – dimo414
爲什麼不創建一個實現Runnable並在構造函數中提供originalCallback的私有類? – rainkinz