Java 中 C# 事件的替代项
我是 .Net 开发人员。我想知道Java中是否有任何事件处理机制用于事件处理,如C#。
我想做的是我想在某种条件下从我的班级中引发/触发一个事件。和此类的使用者应注册该事件并编写事件处理方法。
这可以在C#中轻松完成。我必须在Java中实现这个东西。
在谷歌搜索后,我发现了一些链接,但所有这些都在谈论AWT和swing中的GUI事件。
任何人都可以帮我。
我是 .Net 开发人员。我想知道Java中是否有任何事件处理机制用于事件处理,如C#。
我想做的是我想在某种条件下从我的班级中引发/触发一个事件。和此类的使用者应注册该事件并编写事件处理方法。
这可以在C#中轻松完成。我必须在Java中实现这个东西。
在谷歌搜索后,我发现了一些链接,但所有这些都在谈论AWT和swing中的GUI事件。
任何人都可以帮我。
虽然大多数示例都与 GUI 事件有关,但原理基本相同。您基本上希望一个接口或抽象类来表示事件的处理程序,例如
public interface EventHandler
{
// Change signature as appropriate of course
void handleEvent(Object sender, EventArgs e);
}
则事件的发布者将具有:
public void addEventHandler(EventHandler handler)
public void removeEventHandler(EventHandler handler)
它要么保留事件处理程序本身的列表,要么将它们封装在可重用的类型中。然后,当事件发生时,您只需依次调用每个处理程序。handleEvent
您可以将 C# 中的委托类型视为与 Java 中的单方法接口非常相似,而事件实际上只是一对添加/删除方法。
它们易于使用且方便。我在java中错过了它们,所以写了一个模仿C#基础知识的小型实用程序类。Event
+=
.addListener((x) -> ...)
.broadcast(<EventArgs insance>)
在线演示 - https://repl.it/DvEo/2
事件.java
import java.util.HashSet;
import java.util.Set;
import java.util.function.Consumer;
public class Event {
private Set<Consumer<EventArgs>> listeners = new HashSet();
public void addListener(Consumer<EventArgs> listener) {
listeners.add(listener);
}
public void broadcast(EventArgs args) {
listeners.forEach(x -> x.accept(args));
}
}
com.google.common.collect.Sets.newConcurrentHashSet()
事件参数.java
public class EventArgs {
}