我主要在.NET C#中开发,我喜欢C#中的事件.
我现在正在做Android的东西,因此必须处理Java.当将一些代码从C#移植到Java时,我遇到了事件的问题; Java没有任何与C#Events相对应的内容.
因此,在阅读Java如何处理"事件"时,我唯一能得出的结论就是它没有.Java中没有"事件"这样的东西.相反,他们使用普通的接口和实现这些接口的类.
在Java中:首先,您必须首先创建接口然后,所有想要监听"事件"的类都必须实现该接口.然后,触发"事件"的类必须保留所有侦听器的列表(某种类型的数组)然后,触发"事件"的类必须有一个方法,以便侦听器可以将自己添加到数组
当触发类决定"触发事件"时,它必须遍历侦听器的数组,调用方法.
这只是简单的界面使用,而不是我世界中的事件.
我错了吗?
没有人"假装".Java概念早在C#设计之前就已实现.C#中的事件内部真的是一样的; 虽然它们更容易让程序员使用.也就是说,C#事件变量维护一个事件订阅方法列表,订阅者可以添加和删除该列表中的方法引用.该事件为拥有类提供了触发事件的方法.
你对"事件"的定义是什么?这是一种旨在将一个类系统与另一个系统分离的设计模式.其他类可以订阅在任何一种情况下接收事件的通知(C#或Java),它只是该订阅的实现和消息触发器的不同.
在C#中,您必须定义事件方法签名(委托).这就是接口的作用.
Java没有的C#所做的就是你可以传递对方法的引用(delegate虽然我现在明白这可能在Java 7中可用,至少在JVM级别可用).由于Java中不存在这种情况,因此必须有另一种方法来提供必须是对象的事件(观察者设计模式)接收器,并且通过接口定义它的最佳方法 - 是的,您可以使用抽象类,但是这将严重限制收件人类型.