gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:46:47 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com