【问题标题】:Is it possible to add an interface to an existing class in Kotlin?是否可以向 Kotlin 中的现有类添加接口?
【发布时间】:2018-07-29 09:12:34
【问题描述】:
有时创建一个已经由现有第三方代码(即来自库)实现的接口很有用。例如,我们可以想象选择String 类的方法子集并声明GenericString。然后我们可能会定义实现这些方法的其他GenericStrings,但不会定义String 类的其他方法。唯一的问题是String 类不继承自GenericString 类。是否可以向 Kotlin 中的现有类添加接口,或者我必须创建一个实现该接口的String 的子类?
【问题讨论】:
标签:
inheritance
interface
kotlin
【解决方案1】:
不,很遗憾,不支持“扩展类型”。在 Kotlin 论坛 (here) 上对此进行了讨论,但该语言中已经没有类似的内容了。
如果您想投票,可以使用KEEP。
一种可能的解决方法,虽然不是完全等效的,但它是拥有一个代表您所需行为的接口并创建一个扩展方法,为您要使用的每种类型返回一个实现(“委托”):
fun String.toGenericString() = object : GenericString {
private val str = this@toGenericString
override val length get() = str.length
//...etc
}
然后改用这个。