gpt4 book ai didi

java - Type Erasure 抬头,如何规避?

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:37 26 4
gpt4 key购买 nike

所以我有这个界面

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
}
}

几个问题...

  1. 为什么 Java 不允许类型删除? IIRC 这与与早期版本的 Java 兼容有关,对吗?

编辑:我的意思是为什么 Java 有类型删除(反之亦然)

  1. 是否有任何类型的“mod”/“扩展”(缺少更好的词)或编程语言可以让我绕过类型删除?因为我没有使用旧版本的 Java,所以我不关心我的代码是否与旧代码兼容。

  2. 在 Java 语言中是否有任何变通方法可以用来绕过类型删除?

  3. 如果不是,有哪些替代方法可以在我的程序中编写事件处理代码来让编译器满意?

最佳答案

一个选择是使用 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/

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