可以扩展Kotlin类以符合接口(如Swift类可以)吗?

Tra*_*ggs 3 kotlin swift

在Swift中,我可以创建一个类似的协议

protocol FoobarConvertible {
    var foobar:String { get }
}
Run Code Online (Sandbox Code Playgroud)

然后使用一致的实现扩展系统中的任何类

extension String : FoobarConvertible {
    var foobar:String {
        get {
            return "foobar"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在Kotlin中,我认为接口类似于协议(?),我可以像这样声明一个

protocol FoobarConvertible {
    val foobar:String
}
Run Code Online (Sandbox Code Playgroud)

但是我从文档(这似乎是简洁的练习)中看不出来的是我如何扩展Kotlin的String类以使其符合FoobarConvertible.显然,我可以在Kotlin字符串中添加一个扩展方法

val String.foobar:String
    get() = "foobar"
Run Code Online (Sandbox Code Playgroud)

但是这不允许将字符串用作FoobarConvertible是预期类型的​​参数.

zsm*_*b13 6

Kotlin没有这种语言功能,扩展功能和扩展属性就扩展功能而言 - 这些是可用的,因为它们可以通过静态辅助方法实现,这些方法只是将扩展的接收者作为其第一个参数.

但是,接口不能添加到您可能不会自己编译的现有类中 - 该功能不仅仅是语法糖.(至少在JVM上.)