Java中的回调接口是什么?

Java中的回调接口是什么?,java,Java,接口SetObserver的代码片段取自有效Java(避免过度同步项目67) Bloch将SetObserver接口称为回调接口。在Java中,接口何时称为回调接口 接口作为“回调接口”的一般要求是,该接口为被调用方提供了调用调用方内部代码的方法。其主要思想是调用方有一段代码,当另一个组件的代码中发生某些事情时,需要执行该代码。回调接口提供了一种将此代码传递给被调用组件的方法:调用方实现一个接口,被调用方调用其方法之一 回调机制可以用不同的语言实现:C#除了回调接口之外还有委托和事件,C有可以通

接口SetObserver的代码片段取自有效Java(避免过度同步项目67)


Bloch将
SetObserver
接口称为回调接口。在Java中,接口何时称为回调接口

接口作为“回调接口”的一般要求是,该接口为被调用方提供了调用调用方内部代码的方法。其主要思想是调用方有一段代码,当另一个组件的代码中发生某些事情时,需要执行该代码。回调接口提供了一种将此代码传递给被调用组件的方法:调用方实现一个接口,被调用方调用其方法之一


回调机制可以用不同的语言实现:C#除了回调接口之外还有委托和事件,C有可以通过指针传递的函数,目标C有委托协议,等等。但主要思想始终是一样的:调用方传递一段代码,以便在某个事件发生时调用。

可能重复的
observeSet
不是一个接口,我猜你的意思是
SetObserver
@AlonsoDominguez是的,这是一个打字错误。现在就编辑问题。@Geek Callback是计算机科学中一个非常通用的术语。当一段代码对一个事件感兴趣时,它会注册一个在事件发生时调用的函数,这样这段代码就可以执行所需的操作。它不是特定于javascript的。在C/C++中有函数指针,在C#中有委托,在Java中我们使用接口来实现。接口可用于在Java中实现回调。回调是一种情况,您希望传递对某个行为的引用,然后让另一个对象调用它。在C或C++中,这是函数指针的首要域。在Java中,我们使用接口。我可能错了,但是在Java中,如果说被调用方实现了接口,以便调用方可以调用它,而不是反过来调用它,这难道不是正确的吗?对不起,我知道这个答案已经有三年了。@stevenelberger我认为当前的描述是正确的:调用者实现一个接口,将该实现提供给被调用者,被调用者根据需要回调实现的方法。
public interface SetObserver<E> {
// Invoked when an element is added to the observable set
void added(ObservableSet<E> set, E element);
}
// 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);
    }
  }