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
相关产品推荐
相关产品推荐

