用java实现一个事件监听器Event 类,支持下列方法 addEventlistener(eventName: string.listener: tunction)-监听事件,当事件触发时执行回调函数 removeEventlistener (eventName: string,istener: function):移除监听事件 addEventlistenerOnce(eventName: string.istener: function):监听事件,当事件触发时执行回调函数并只执行一次回调函数 removeAll(eventName:string) 移除监听事件的所有回调函数 emit(eventName) 触发事件,执行回调函数 其中参数eventName为事件名,listener为事件触发后执行的回调函数 系统将自动执行你实现的Event类中的函数,校验是否实现以上功能 注意:系统通过执行西数,将控制台输出信息与测试用例进行比对,以验证函数的正确。所以函数内请不要添加输出控制台信息的代码,比比如 Javascript 的console.log
时间: 2024-04-21 20:23:15 浏览: 160
任何事件::shortcake:不到1k,一个迷你的事件管理器,希望能在您的代码中做一块砖
你好!以下是用Java实现的Event类,满足您提供的要求:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
public class Event {
private Map<String, List<Consumer<Object>>> eventListeners;
public Event() {
eventListeners = new HashMap<>();
}
public void addEventListener(String eventName, Consumer<Object> listener) {
List<Consumer<Object>> listeners = eventListeners.getOrDefault(eventName, new ArrayList<>());
listeners.add(listener);
eventListeners.put(eventName, listeners);
}
public void removeEventListener(String eventName, Consumer<Object> listener) {
List<Consumer<Object>> listeners = eventListeners.getOrDefault(eventName, new ArrayList<>());
listeners.remove(listener);
eventListeners.put(eventName, listeners);
}
public void addEventListenerOnce(String eventName, Consumer<Object> listener) {
Consumer<Object> wrapperListener = (event) -> {
listener.accept(event);
removeEventListener(eventName, wrapperListener);
};
addEventListener(eventName, wrapperListener);
}
public void removeAllListeners(String eventName) {
eventListeners.remove(eventName);
}
public void emit(String eventName, Object event) {
List<Consumer<Object>> listeners = eventListeners.getOrDefault(eventName, new ArrayList<>());
for (Consumer<Object> listener : listeners) {
listener.accept(event);
}
}
}
```
请注意,上述代码中并没有包含任何控制台输出信息的代码。您可以使用该Event类进行事件监听、触发和移除监听等操作。希望能对您有所帮助!
阅读全文