java – Guava EventBus:监听事件超类型(例如EventObject或Object)是什么意思?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Guava EventBus:监听事件超类型(例如EventObject或Object)是什么意思?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2631字,纯文字阅读大概需要4分钟。
内容图文
![java – Guava EventBus:监听事件超类型(例如EventObject或Object)是什么意思?](/upload/InfoBanner/zyjiaocheng/752/d39384e4808f46579e224dc76bcf2c5a.jpg)
在Google Guava EventBusExplained页面中,我不明白他们何时说出以下内容:
To listen for a common event supertype (such as EventObject or
Object)…
…in traditional Java events: not easy.
…with EventBus:
events are automatically dispatched to listeners of any supertype,
allowing listeners for interface types or “wildcard listeners” for
Object.
>听一个常见的事件超类是什么意思?
>当他们提到EventObject时,他们是在谈论java.util.EventObject吗?
>允许“接口类型的侦听器”或“对象”的通配符侦听器是什么意思?
解决方法:
这与Guava的EventBus类可以克服的方法重载和接口的局限性有关.
对于接口,请考虑以下情形:
我有相同的代码,可以调用多种形式的输入.例如,侦听鼠标事件,键事件和焦点事件的侦听器,但所有方法都执行相同的操作:重新绘制源.这意味着我的代码看起来像这样:
public class BunchOfListeners implements MouseListener, KeyListener, FocusListener {
@Override
public void focusGained(FocusEvent e) {
doSomething(e);
}
@Override
public void focusLost(FocusEvent e) {
doSomething(e);
}
@Override
public void keyTyped(KeyEvent e) {
doSomething(e);
}
@Override
public void keyPressed(KeyEvent e) {
doSomething(e);
}
@Override
public void keyReleased(KeyEvent e) {
doSomething(e);
}
@Override
public void mouseClicked(MouseEvent e) {
doSomething(e);
}
@Override
public void mousePressed(MouseEvent e) {
doSomething(e);
}
@Override
public void mouseReleased(MouseEvent e) {
doSomething(e);
}
@Override
public void mouseEntered(MouseEvent e) {
doSomething(e);
}
@Override
public void mouseExited(MouseEvent e) {
doSomething(e);
}
public void doSomething(EventObject e) {
((Component) e.getSource()).repaint();
}
}
请注意这是多么丑陋?有10种不同的方法,最终我们关心的唯一事情是从事件中获取源(顺便说一下,由EventObject指定,这就是他们在他们的例子中使用它的原因)并在其上调用repaint.
使用Guava的EventBus,这非常简单.我在GuavaIsAwesome ComponentRepainter类中需要的只是一种方法:
public class ComponentRepainter {
@Subscribe
public void doSomething(EventObject e) {
((Component) e.getSource()).repaint();
}
}
当您使用EventBus注册它并稍后激活时,例如,它上面有一个MouseEvent:
EventBus eventBus = ... ;
eventBus.register(new ComponentRepainter());
然后:
MouseEvent e = ... ;
eventBus.post(e);
这将调用ComponentRepainter上的doSomething方法,因为它不仅会使用MouseEvent为参数激活事件到@Subscribe方法,还会激活任何具有可从MouseEvent分配的参数的方法.换句话说,因为MouseEvent扩展了EventObject,所以Guava的EventBus会将它传递给任何接受EventObject的东西.如果我们使doSomething接受Object,那么我们可以获得发布到EventBus的每个事件,使其成为一种全局侦听器(因为Java中的所有内容都扩展了Object).
同样的事情也适用于接口.如果将具体实现传递给某个接口的EventBus,则将调用使用该接口的@Subscribe方法(而不是具体类型).它更加灵活,并且克服了“十种无用的方法”方法.
内容总结
以上是互联网集市为您收集整理的java – Guava EventBus:监听事件超类型(例如EventObject或Object)是什么意思?全部内容,希望文章能够帮你解决java – Guava EventBus:监听事件超类型(例如EventObject或Object)是什么意思?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。