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

如何将Java泛型类转换为Kotlin?泛型转换遇阻求助

Java泛型抽象类转Kotlin的正确写法

先看你的Java原代码,核心是带上限的泛型<T extends FlagFilter>,以及两个抽象方法:返回T的Class对象,和接收T类型参数的处理方法。你的Kotlin版本存在几个关键问题,修正后的代码如下:

abstract class AbstractFlagFilterFactory<T : FlagFilter> : FilterFactory {

    abstract fun getFilterFlagType(): Class<T>

    abstract fun processFlag(
        query: org.jooq.SelectQuery<*>,
        flag: T
    )
}

修正点说明:

  • 泛型声明:把<out FlagFilter>改成<T : FlagFilter>,和Java的<T extends FlagFilter>完全对应。out是协变修饰符,适用于只输出泛型类型的场景,但你的processFlag需要接收T类型的参数,协变会导致编译错误,所以必须用普通的泛型参数声明。
  • getFilterFlagType返回值:原Java返回Class<T>,Kotlin对应Class<T>,而不是Class<out FlagFilter>,这样子类实现时可以返回具体的子类Class,保证类型一致性。
  • processFlag方法:
    • 方法名改回processFlag,和原Java保持一致(你写成了processSetFlag)。
    • flag参数类型是T,而不是Class<out FlagFilter>,原Java里是接收T类型的实例,不是Class对象。
    • SelectQuery<?>在Kotlin里用SelectQuery<*>表示任意类型的SelectQuery,对应Java的通配符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:54:19