如何在Java中实现类似于C#的语言级事件
C#具有语言级别的事件概念,使用保留关键字event
和delegate
来定义发布者和订阅者方法。 有人问过Java是否有本机支持,但答案显然是否定的。 有几种选择 ,包括使用AWT / Swing样式事件,构建我自己的Observer模式或使用其他发布/订阅方式。 这是可能的,但正如一个答案所说,“只需要更多的腿部工作。”
通常,任何实现都遵循相同的类型方法并且可以是自动化的。 Java具有不同的元编程机制,例如AOP或AST转换。 如何在Java中实现C#事件以允许尽可能少的“legwork”?
也许Project Lombok ?
如果您有分布式环境,请使用Akka 。
否则你有几个选择
番石榴有EvenBus 。 Guava将是我的选择,因为它已成为Java项目使用的核心库之一,如apache commons,slf4j等。
谷歌搜索“java事件库”揭示了更多选择。
否则,编写一个包含订阅者的类,并在事件进入时向他们发送事件。容易,但要小心并发。