`class C(val field: T): T by field`是什么意思?

Som*_*ent 7 kotlin

我最近遇到了以下类声明

class C(val field: T): T by field
Run Code Online (Sandbox Code Playgroud)

其中 T 是一个接口。

这种技术叫什么?

这个声明的作用是什么?

Ani*_*ahu 9

这称为委托,具体来说是一种称为委托实现的委托。

通过这样做,该类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。