什么是Java中的回调接口?
这对于接口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中称为回调接口的接口?
为接口的一般要求是一个“回调接口”是界面提供用于被呼叫者调用调用者中的代码的方法。主要思想是调用者有一段代码需要在另一个组件的代码中发生某些事情时执行。回调接口提供一种方法来通过这个代码到组件被调用:调用者实现一个接口,和被呼叫者调用它的方法之一。
回拨机制可能不同用不同的语言来实现:C#有委托和事件除回调接口,C具有可通过指针传递的功能,目的C有委托协议,并依此类推。但主要想法总是相同的:调用者传递一段代码以在发生某个事件时被调用。的
我可能是错的,但是在Java的情况下,说被调用者实现接口是不是正确的,以便调用者可以调用它而不是其他方式?对不起,我知道这个答案差不多3岁。 – stevenelberger 2015-03-17 07:02:50
@stevenelberger我认为当前的描述是正确的:调用者实现一个接口,将实现提供给被调用者,并且被调用者根据需要调用实现的方法。 – dasblinkenlight 2015-03-17 10:01:31
可能重复[什么是回调函数?(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