gpt4 book ai didi

java - 什么是Java中的回调接口(interface)?

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:59 24 4
gpt4 key购买 nike

SetObserver 接口(interface)的这段代码摘自Effective Java(避免过度同步第 67 条)

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);
}
}

Bloch 指的是 SetObserver<E>接口(interface)作为一个回调接口(interface)。什么时候接口(interface)在Java中被称为回调接口(interface)?

最佳答案

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

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

关于java - 什么是Java中的回调接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11577695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com