gpt4 book ai didi

Java 对列表中的所有对象执行方法

转载 作者:搜寻专家 更新时间:2023-10-31 19:44:22 24 4
gpt4 key购买 nike

我有这样一个界面:

public interface Listener {
void onA();
void onB();
void onC();
}

还有一个监听器/观察器列表:

List<Listener> listeners = new ArrayList<Listener>();

我如何通过 Listener.onA()Listener.onB()Listener 轻松通知所有监听器 A、B、C 已发生。 onC()?

我是否必须对所有监听器进行至少三次复制粘贴迭代?

在 C++ 中我会创建这样一个函数:

void Notify(const std::function<void(Listener *listener)> &command) {
for(auto &listener : listeners) {
command(listener);
}
}

并为每个方法传递 lambda:

Notify([](Listener *listener) {listener->onA();});

Notify([](Listener *listener) {listener->onB();});

Notify([](Listener *listener) {listener->onC();});

Java 中有类似的方法吗?

最佳答案

在 Java 8 中,有:

listeners.forEach(listener -> listener.onA());

或:

listeners.forEach(Listener::onA);

请注意,还有许多其他函数式编程风格的操作可以使用 lambda 函数执行,但其中大多数操作需要您首先通过调用 从您的集合中创建一个>.stream() 就可以了。 forEach(),正如我从评论中了解到的那样,是一个异常(exception)。

关于Java 对列表中的所有对象执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36753273/

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