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

Scala2.13继承含内部类参数抽象方法的Java类重写方法报错如何解决

错误原因

该报错是Java非静态内部类与Scala路径依赖类型不兼容导致的:
你在Java中定义的Context是JProcessAllWindowFunction的非静态内部类,这类内部类默认绑定外部类实例,父类process方法里的Context参数实际是和当前JProcessAllWindowFunction实例绑定的路径依赖类型。你在Scala代码中使用的JProcessAllWindowFunction[IN, OUT, W]#Context属于类型投影,指代任意外部类实例对应的Context类型,和父类方法签名不匹配,因此编译器识别不到这是合法的重写。

修复方案

方案1:修改Java代码(推荐,无兼容问题)

给JProcessAllWindowFunction中的Context内部类添加static修饰,改为静态内部类:

public abstract static class Context {
    public abstract W window();
    public abstract <X> void output( X value);
}

静态内部类不需要绑定外部类实例,不存在路径依赖问题,修改后原有Scala代码无需改动即可正常编译。

方案2:仅修改Scala代码(无需调整Java侧逻辑)

直接使用继承作用域内的Context类型,不要手动写类型投影:

import java.lang.Iterable

final class ScalaProcessAllWindowFunctionWrapper[IN, OUT, W <: Window] extends JProcessAllWindowFunction[IN, OUT, W] {
  override def process(context: Context, elements: Iterable[IN], out: Collector[OUT]): Unit = ???
}

这里的Context会自动识别为当前子类继承的父类路径依赖Context类型,和父类方法签名完全匹配,即可正常重写。


内容的提问来源于stack exchange,提问作者user51

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:36:04