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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:42:51