如何让Kotlin抽象类的内部接口继承父类泛型类型
在Kotlin中让抽象类泛型被内部接口自动继承使用
你可以直接在抽象类内部定义函数式接口,并让接口直接复用抽象类的泛型参数,当抽象类被子类具体化泛型类型后,内部接口的泛型会自动绑定到子类指定的类型,无需显式声明。
实现代码示例
首先定义带泛型的抽象类及内部接口:
abstract class MyAbstractClass<T> { // 内部函数式接口直接复用外部抽象类的泛型T fun interface MyInterface { fun doSomething(param: T) } fun someFunction(callback: MyInterface) { // 示例逻辑:调用接口方法 callback.doSomething(getTestData()) } // 由子类实现,提供对应类型的数据 protected abstract fun getTestData(): T }
接着定义具体化泛型的子类:
class StringProcessor : MyAbstractClass<String>() { override fun getTestData(): String { return "Sample String Data" } fun execute() { // 实现内部接口时,参数类型自动匹配为String,无需显式指定泛型 someFunction(object : MyInterface { override fun doSomething(param: String) { println("Processed: $param") } }) // 函数式接口支持lambda简化写法 someFunction { param -> println("Lambda processed: $param") } } }
调用测试:
fun main() { StringProcessor().execute() }
为什么这种方式可行
当子类StringProcessor继承MyAbstractClass<String>时,抽象类的泛型T被确定为String,内部的MyInterface会自动继承这个泛型上下文,因此在实现接口方法时,参数类型会被自动推导为String,完全不需要显式指定泛型类型,和你用lambda实现的效果一致,但满足了用接口实现的需求。
内容的提问来源于stack exchange,提问作者Shadow
相关产品推荐
相关产品推荐

