是否可以扩展Kotlin类以使其符合Interface(就像Swift类一样)?

时间:2018-07-05 17:18:26

标签: swift kotlin

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

protocol FoobarConvertible {
    var foobar:String { get }
}

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

extension String : FoobarConvertible {
    var foobar:String {
        get {
            return "foobar"
        }
    }
}

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

protocol FoobarConvertible {
    val foobar:String
}

但是,对我来说,从文档(似乎是简短的练习)中看不出来的是我如何扩展Kotlin的String类,使其符合FoobarConvertible。显然,我可以将扩展方法添加到Kotlin字符串

val String.foobar:String
    get() = "foobar"

但是这不允许将Strings用作期望的FoobarConvertible类型的参数。

1 个答案:

答案 0 :(得分:5)

Kotlin没有此语言功能,扩展功能和扩展属性已达到扩展功能的程度-之所以可用,是因为它们可以通过静态帮助器方法实现,而静态帮助器方法只是将扩展的接收者作为其第一个参数。

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