【问题标题】: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
    }
    

    然后改用这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 2013-02-24
      • 2020-10-31
      • 2011-10-27
      相关资源
      最近更新 更多