我正在尝试使用接口(interface)和事件来解耦一些 UI 代码,我想知道 Java 中是否有方法/最佳实践来将事件声明为 Java 接口(interface)的一部分——类似于 C# 提供的:
// C# event declaration in interface
public interface IAction
{
event EventHandler OnAction;
}
我的目标只是标记一个接口(interface),以便知道它(实现者)触发了特定类型的事件。我希望我能包含的不仅仅是文档来强制执行该行为。我意识到 Java 不提供“事件”关键字或执行此操作的直接方法,因此我希望获得有关解决方法或实现此目的最佳实践的一些建议。
我能想到的一种方法是创建一个代表触发事件能力的通用标记接口(interface):
public interface FiresEvent<T extends Event> {
public void fireEvent();
}
...然后在我的自定义界面中继承该界面。
public interface MyInterface extends FiresEvent<ActionEvent> {
}
这种方法的问题是“FiresEvent”只能被继承一次,即使泛型类型发生变化,所以对于一个对象可能是多个事件的来源的情况,该解决方案似乎不够通用。
我很想知道人们会如何处理这种情况,以及是否有比仅记录触发事件的需要更好的方法。
编辑: 也许以下内容会澄清我的问题:
我了解 Java 处理程序列表方法和通过允许调用者针对对象注册处理程序的 self 处理。在我的例子中,我依赖于事件总线,因此我们可以将“触发”事件视为将它们放在那里,以便将其他内容重定向到处理程序。
我想将接口(interface)职责定义为:
- 接口(interface)实现者向世界/事件总线/任何事物触发类型 T 的事件
- 接口(interface)实现者不必自己委托(delegate)注册的监听器
最佳答案
Java 处理事件的方式与您习惯的方式略有不同,但概念是相同的。您创建所谓的事件监听器,它会在事件发生时被调用。这可能是一个更好的构造,因为它允许注册多个监听器。
我建议浏览这个tutorial
关于java - 最佳实践 - 将事件声明为 Java 接口(interface)的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7224991/