我正在尝试使用接口和事件来解耦一些 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”只能继承一次,即使泛型类型发生变化,因此对于一个对象可能是多个事件源的情况,该解决方案似乎不够通用。
我很想知道人们会如何处理这个问题,以及是否有比仅仅记录触发事件的需要更好的方法。
EDIT:也许以下内容可以解答我的疑问:
我通过允许调用者针对对象注册处理程序来了解 Java 处理程序列表方法和自我处理。就我而言,我依赖于事件总线,因此我们可以将“触发”事件视为将它们放在那里,以便将其他事件重定向到处理程序。
我想将接口职责定义为:
- 接口实现者将类型 T 的事件触发到世界/事件总线/任何事物中
- 接口实现者不必委托给已注册的侦听器本身
Java 处理事件的方式与您习惯的稍有不同,但概念是相同的。您创建所谓的事件侦听器,并在事件发生时调用它。这可能是一个更好的构造,因为它允许注册多个侦听器。
我建议浏览这个tutorial http://download.oracle.com/javase/tutorial/uiswing/events/index.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)