如何在Java中实现类似于C#的语言级事件

Pet*_*ler 5 c# java events porting

C#具有语言级别事件概念,使用保留关键字eventdelegate定义发布者和订阅者方法.有人问过Java是否有本机支持,但答案显然是否定的.有几种选择,包括使用AWT/Swing样式事件,构建我自己的Observer模式或使用其他发布/订阅方式.这是可能的,但正如一个答案所说,"只需要更多的腿部工作."

通常,任何实现都遵循相同的类型方法并且可以是自动化的.Java具有不同的元编程机制,例如AOP或AST转换.如何在Java中实现C#事件以允许尽可能少的"legwork"?

也许Project Lombok

Dan*_*yev 1

如果您有分布式环境,请使用Akka

否则你有几个选择

Guava 有EvenBus。Guava 是我的选择,因为它已经成为 Java 项目使用的核心库之一,例如 apache commons、slf4j 等。

Google 搜索“java event library”显示了更多选择。

否则,编写一个类来保存订阅者并在订阅者到来时向他们分派事件。简单,但要注意并发性。