Kotlin是否具有扩展类来像Swift一样进行接口

Ely*_*lye 6 kotlin swift

在Swift中,我们可以使用如下接口扩展类

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

extension MyOrigin: MyExtend {
   public var type: ListItemDataType {
       return "Origin"
   }
}
Run Code Online (Sandbox Code Playgroud)

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

l'L*_*L'l 5

是的,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)
Run Code Online (Sandbox Code Playgroud)

科特林

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

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

C().foo("A")
C().foo(1)
Run Code Online (Sandbox Code Playgroud)

输出

class
extension
Run Code Online (Sandbox Code Playgroud)

您需要仔细阅读一些关键差异。

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

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

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

  • 谢谢。您给出的示例是扩展功能。我希望实现的是对接口的扩展,以便它需要实现接口内的所有功能。这在 Kotlin 中是可能的吗? (3认同)
  • 当前仅支持扩展功能和扩展属性,将来可能会添加包含该功能的功能。 (2认同)