在Swift中,我们可以使用如下接口扩展类
extension MyExtend {
public var type: String { return "" }
}
extension MyOrigin: MyExtend {
public var type: ListItemDataType {
return "Origin"
}
}
Run Code Online (Sandbox Code Playgroud)
我们在Kotlin中具有这种能力吗?(例如,扩展接口)
是的,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
| 归档时间: |
|
| 查看次数: |
1969 次 |
| 最近记录: |