這對於接口SetObserver代碼片段從有效的Java採取(避免過多的同步項67)什麼是Java中的回調接口?
public interface SetObserver<E> {
// Invoked when an element is added to the observable set
void added(ObservableSet<E> set, E element);
}
而SetObserver
被傳遞到addObserver()
和removeObserver
方法如下給出:
// Broken - invokes alien method from synchronized block!
public class ObservableSet<E> extends ForwardingSet<E> {
public ObservableSet(Set<E> set) {
super(set);
}
private final List<SetObserver<E>> observers =
new ArrayList<SetObserver<E>>();
public void addObserver(SetObserver<E> observer) {
synchronized (observers) {
observers.add(observer);
}
}
public boolean removeObserver(SetObserver<E> observer) {
synchronized (observers) {
return observers.remove(observer);
}
}
private void notifyElementAdded(E element) {
synchronized (observers) {
for (SetObserver<E> observer : observers)
observer.added(this, element);
}
}
布洛赫指SetObserver<E>
接口作爲回調接口。什麼時候在Java中稱爲回調接口的接口?
可能重複[什麼是回調函數?(http://stackoverflow.com/questions/824234/what-is-a-callback-function) – assylias 2012-07-20 10:42:39
'ObservableSet'是不是界面,我猜你的意思'SetObserver ' –
2012-07-20 10:46:23
@AlonsoDominguez是的,它是一個錯字。現在編輯問題。 – Geek 2012-07-20 10:47:41