SetObserver 接口的代码片段取自有效的Java(避免过度同步第67条)
public interface SetObserver<E> {
// Invoked when an element is added to the observable set
void added(ObservableSet<E> set, E element);
}
And the SetObserver
被传递给addObserver()
and 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中的接口什么时候称为回调接口?
接口成为“回调接口”的一般要求是该接口为被调用者提供调用调用者内部代码的方法。主要思想是调用者有一段代码需要在另一个组件的代码中发生某些情况时执行。回调接口提供了一种将此代码传递给被调用组件的方法:调用者实现一个接口,而被调用者调用其方法之一。
回调机制在不同的语言中可能有不同的实现:C#除了回调接口之外还有委托和事件,C有可以通过指针传递的函数,Objective C有委托协议等等。但主要思想始终是相同的:调用者传递一段代码,以便在发生特定事件时调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)