Tôi đã có một giao diện như:Java thực hiện phương pháp trên tất cả các đối tượng trong một danh sách
public interface Listener {
void onA();
void onB();
void onC();
}
Và có một danh sách các thính giả/nhà quan sát:
List<Listener> listeners = new ArrayList<Listener>();
Làm thế nào tôi có thể dễ dàng thông báo cho tất cả người nghe, mà A, B, C đã xảy ra qua Listener.onA()
, Listener.onB()
, Listener.onC()
?
Tôi có phải sao chép-dán lặp lại trên tất cả người nghe ít nhất ba lần không?
Trong C++ tôi sẽ tạo ra một chức năng như:
void Notify(const std::function<void(Listener *listener)> &command) {
for(auto &listener : listeners) {
command(listener);
}
}
Và vượt qua lambda cho mỗi phương pháp:
Notify([](Listener *listener) {listener->onA();});
hoặc
Notify([](Listener *listener) {listener->onB();});
hoặc
Notify([](Listener *listener) {listener->onC();});
Có cách tiếp cận tương tự trong Java không?
Bạn không cần phải 'dòng'. 'List' có phương thức' forEach' trực tiếp trên nó – tddmonkey
Chỉ đơn giản là 'foreach' mà không có' stream' –
@tddmonkey và Yassin Hajaj: Cảm ơn; Tôi không biết điều đó. –