有时,创建一个已经由现有第三方代码(例如,从库中)实现的接口(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
}
然后改用它。