我最近遇到了以下类声明:
class C(val field: T): T by field
Run Code Online (Sandbox Code Playgroud)
其中 T 是一个接口。
这种技术叫什么?
这个声明的作用是什么?
通过这样做,该类C使用另一个对象实现了接口。
即当您调用接口中定义的方法(函数)时,调用将被转移到您在案例中委托的对象,它是 field
interface T {
fun print()
}
class TImpl: T {
override fun print() = print("Hello World!")
}
class C(val field: T) : T by field {...}
fun main() {
val c = C(TImpl())
c.print() //Prints: Hello World!
}
Run Code Online (Sandbox Code Playgroud)
这里print()调用被转移到了,TImpl因为类 C 通过使用字段实现了 T。
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |