You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java重写抽象类onEvent方法如何避免强制转换IMissionEvent参数

解决方案

方案1:为抽象父类添加泛型限定(最推荐,编译期类型安全)

你遇到的报错本质是Java方法重写要求参数类型完全一致,不支持参数协变,通过泛型可以在定义子类时指定具体的入参事件类型,无需强制转换:

  1. 改造Mission抽象类,添加泛型参数限定为IMissionEvent的实现类:
public abstract class Mission<T extends IMissionEvent> {
    public abstract void onEvent(final T event);
}
  1. MissionKill继承父类时指定具体泛型类型为MissionEventLogin,重写方法直接用对应类型入参:
public class MissionKill extends Mission<MissionEventLogin> {
    @Override
    public void onEvent(final MissionEventLogin event) {
        // 直接编写业务代码,无需强制类型转换
    }
}

该方案的优势是编译期就会校验事件类型和Mission子类的匹配关系,不会出现运行时类型转换异常。如果有其他Mission子类需要处理不同的事件类型,只需要继承时指定对应的泛型参数即可。

方案2:使用instanceof模式匹配(无需修改父类,适合JDK16+版本)

如果你无法修改父类Mission的定义,且使用的是JDK16及以上版本,可以用Java的instanceof模式匹配语法省略手动强转步骤:

@Override
public void onEvent(final IMissionEvent event) {
    if (event instanceof MissionEventLogin login) {
        // 直接使用匹配得到的login变量,不需要手动强转
        // 业务代码
    }
}

内容的提问来源于stack exchange,提问作者Girls are beautiful

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:06:03