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

标签 c# java events porting

C# 有 events on a language level 的概念,使用保留关键字 eventdelegate 来定义发布者和订阅者方法。已经asked if Java has native support for that但答案显然是否定的。有several alternatives ,其中包括使用 AWT/Swing 风格的事件,构建我自己的 Observer pattern或使用其他发布/订阅方式。这是可能的,但正如一个答案所说,“只是需要多做一些跑腿工作。”

一般来说,任何实现都遵循相同的类型化方法,并且可以自动化。 Java 有不同的元编程机制,例如AOP 或 AST 转换。如何在 Java 中实现 C# 事件以允许尽可能少的“腿部工作”?

也许 Project Lombok

最佳答案

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

否则你有几个选择

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

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

否则,编写一个类来保存订阅者并在他们进入时将事件分派(dispatch)给他们。简单,但要注意并发性。

关于c# - 如何在Java中实现类似C#的语言级事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21007276/

相关文章:

javascript - 如何正确处理 'body' jquery 事件以关闭下拉菜单

c# - 是否可以在 Controller 中使用 UpdateModel 来填充对象?

C# 播放 Vimeo 视频

c# - ChannelReader.ReadAllAsync(CancellationToken) 实际上并未在迭代中取消

java - 为什么 maven-enforcer-plugin 在 travis-ci.org 上与 3.1.1 一起运行时会检测到 maven 3.2.5?

java - 将字符串与 JSON 字符串属性进行比较

c# - 结合委托(delegate)和逆变

java - 创建一个调用构造函数的模拟

forms - Backbone.js 和表单输入模糊

Javascript Change 和 Click 事件不会同时触发