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

Kotlin中如何重写泛型函数?解决重写冲突重载问题

Kotlin泛型接口重写冲突修复

问题代码

interface Base{
    
    fun <T:Number> foo(): T
}

class Child: Base {
    override fun foo(): Int {
        return 1
    }
}

报错信息

Conflicting overloads...

修复方案

将泛型定义从方法层面迁移至接口层面,让接口本身成为泛型接口,子类实现时指定具体类型:

interface Base<T: Number>{

    fun foo(): T
}

class Child: Base<Int> {
    override fun foo(): Int {
        return 1
    }
}

修复说明

原代码中Base接口的foo是泛型方法,调用方可以指定任意Number子类类型来调用该方法。而子类Child试图将返回值固定为Int来重写方法,这与原泛型方法的多态签名冲突——泛型方法允许返回多种类型,子类无法用单一类型覆盖这种行为。

改为泛型接口后,接口的类型参数由子类实现时确定,foo方法的返回类型被固定为子类指定的Int,重写时就不会出现签名冲突,逻辑也更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:24:52