Đoạn mã này cho SetObserver giao diện được lấy từ Java hiệu quả (Tránh quá mức đồng bộ hóa mục 67)Giao diện gọi lại trong Java là gì?
public interface SetObserver<E> {
// Invoked when an element is added to the observable set
void added(ObservableSet<E> set, E element);
}
Và SetObserver
được chuyển cho addObserver()
và removeObserver
phương pháp như đưa ra dưới đây:
// 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 tham chiếu đến giao diện SetObserver<E>
dưới dạng giao diện gọi lại gọi. Khi nào một giao diện được gọi là giao diện gọi lại trong Java?
thể trùng lặp của [một hàm callback là gì?] (Http://stackoverflow.com/questions/824234/what-is-a-callback-function) – assylias
'ObservableSet 'không là một giao diện, tôi đoán bạn có nghĩa là 'SetObserver ' –
@AlonsoDominguez có nó là một lỗi đánh máy. chỉnh sửa câu hỏi ngay bây giờ. – Geek