インターフェイス SetObserver のこのコード スニペットは、Effective Java (Avoid Excessive Synchronization Item 67)から取得したものです。
public interface SetObserver<E> {
// Invoked when an element is added to the observable set
void added(ObservableSet<E> set, E element);
}
そして、以下に示すようにandメソッドに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);
}
}
Bloch は、このSetObserver<E>
インターフェイスをコールバック インターフェイスと呼んでいます。Javaでコールバックインターフェースと呼ばれるインターフェースはいつですか?