java - 最佳实践 - 将事件声明为 Java 接口(interface)的一部分

标签 java events

我正在尝试使用接口(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/

相关文章:

java - 如何重命名 org.eclipse.jface.dialogs.MessageDialog 的文本 OK 和取消

java - Eclipse JDT IJavaProject 获取根文件

java - 输出字符串中某个字符的一次出现 C#

events - JavaFX - 为什么我的 FileChooser 允许我访问原始舞台?

events - Google Analytics 事件在开发者控制台中有效,但在页面中无效

java - 找不到符号,符号: Method setDate(Date) in Netbeans

java - 内部类如何使这个引用转义

c# - WPF:从自定义控件引用窗口

javascript - 是什么决定了一个事件是否传递给了我在 javascript 中的函数?

javascript - 调用选择选项中的函数