Kotlin是否具有像Swift一样的接口扩展类

时间:2018-05-16 04:11:04

标签: swift kotlin

在Swift中,我们可以扩展一个带有接口的类,如下所示

extension MyExtend {
   public var type: String { return "" }
}

extension MyOrigin: MyExtend {
   public var type: ListItemDataType {
       return "Origin"
   }
}

我们在Kotlin有这种能力吗? (例如扩展接口)

1 个答案:

答案 0 :(得分:2)

是的, Kotlin 确实有Extensions - 类似于 Swift

<强>夫特

class C {
    func foo(i: String) { print("class") }
}

extension C {
    func foo(i: Int) { print("extension") }
}

C().foo(i: "A")
C().foo(i: 1)

<强>科特林

class C {
    fun foo(i: String) { println("class") }
}

fun C.foo(i: Int) { println("extension") }

C().foo("A")
C().foo(1)

<强>输出

class
extension

您希望阅读一些重要的差异。

  

扩展实际上并不修改它们扩展的类。通过定义   扩展,您不会将新成员插入到类中,而只是生成   新函数可以使用点符号对此变量进行调用   类型。

     

我们想强调调度扩展功能   静态地,即它们不是接收器类型的虚拟。这意味着   被调用的扩展函数由类型决定   调用函数的表达式,而不是函数的类型   在运行时评估该表达式的结果。

https://kotlinlang.org/docs/reference/extensions.html