作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
所以我有这个界面
public interface EventHandler<E extends EventObject>
{
public void handleEvent(E event);
}
我想为它派生处理事件的类,如下所示:
public class WorkingHandler implements EventHandler<MouseEvent>
{
public void handleEvent(MouseEvent event)
{
//handle event
}
}
上面的例子工作正常。但是编译器不会让我多次实现 EventHandler,因为非常令人沮丧的类型删除。
public class NotWorkingHandler implements EventHandler<MouseEvent>, EventHandler<KeyEvent>
{
public void handleEvent(MouseEvent event)
{
//handle mouse event
}
public void handleEvent(KeyEvent event)
{
//handle key event
}
}
几个问题...
编辑:我的意思是为什么 Java 有类型删除(反之亦然)
是否有任何类型的“mod”/“扩展”(缺少更好的词)或编程语言可以让我绕过类型删除?因为我没有使用旧版本的 Java,所以我不关心我的代码是否与旧代码兼容。
在 Java 语言中是否有任何变通方法可以用来绕过类型删除?
如果不是,有哪些替代方法可以在我的程序中编写事件处理代码来让编译器满意?
最佳答案
一个选择是使用 Guava EventBus向订阅者发布事件。它专为解决您目前面临的问题而设计。
有了它,您不需要实现任何接口(interface)...只需提供两个 @Subscribe
方法,如下所示:
@Subscribe
public void handleKeyEvent(KeyEvent event) { ... }
@Subscribe
public void handleMouseEvent(MouseEvent event) { ... }
有关它的一些附加文档可在 Guava 上找到 wiki .
关于java - Type Erasure 抬头,如何规避?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166620/
所以我有这个界面 public interface EventHandler { public void handleEvent(E event); } 我想为它派生处理事件的类,如下所示
我是一名优秀的程序员,十分优秀!