我正在试图使用接口和事件解耦一些UI代码,并且想知道在Java中是否有声明事件作为Java接口的一部分的方法/最佳实践 - 就像C#所提供的那样:
// C# event declaration in interface
public interface IAction
{
event EventHandler OnAction;
}
我的目标是简单地标记一个接口,以便知道它(实现者)触发特定类型的事件。我希望能够除了文档之外,还包含更多内容来确保该行为。我意识到Java不提供"event"关键字或直接实现这一点的方法,因此我希望得到一些解决方法或最佳实践建议。
我能想到的一种方法是创建一个通用标记接口,表示可以触发事件的能力:
public interface FiresEvent<T extends Event> {
public void fireEvent();
}
......然后在我的自定义接口中继承该接口。
public interface MyInterface extends FiresEvent<ActionEvent> {
}
这种方法的问题在于,“FiresEvent”只能被继承一次,即使泛型类型改变,因此该解决方案似乎不够通用,不能处理一个对象可能是多个事件源的情况。
我很想知道人们会如何处理这个问题,是否有比仅仅记录需要触发事件更好的方法。
编辑: 也许以下内容可以澄清我的问题:
我理解Java中处理程序列表的方法和自我处理,通过允许调用者针对对象注册处理程序。在我的情况下,我依赖于事件总线,因此我们可以将“触发”事件视为将它们放在外面,以便其他内容重定向到处理程序。
我想定义接口责任为: 1. 接口实现者向世界/事件总线/任何地方触发类型为T的事件 2. 接口实现者不必自己委托给已注册的听众。