有时,创建一个已经由现有第三方代码(例如,从库中)实现的接口(interface)很有用。例如,我们可以想象选择String类的方法的子集并声明GenericString。然后,我们可能会定义实现这些方法的其他GenericString,而不是String类的其他方法。唯一的问题是String类不继承自GenericString类。是否可以向Kotlin中的现有类添加接口(interface),还是我必须创建实现该接口(interface)的String子类?

最佳答案

不,很遗憾,不支持“扩展类型”。在Kotlin论坛(here)上对此进行了讨论,但是该语言中没有类似的东西。
如果您想投票,请输入KEEP
一种可能的解决方法,尽管它不是完全等效的,但是要有一个代表您想要的行为的接口(interface),并创建一个扩展方法,以针对您要使用的每种类型返回一个实现(“委托(delegate)”):

fun String.toGenericString() = object : GenericString {
    private val str = this@toGenericString
    override val length get() = str.length
    //...etc
}
然后改用它。

10-06 08:36