在为 android 开发时,我有时会遇到如下情况:
var someModel: someViewModel by notNullAndObservable { vm ->
...
}
我不明白 by
关键字的意义是什么。
最佳答案
简单来说,by
关键字可以理解为provided by。
从属性消费者的角度来看,val
是有getter(get)的东西,var
是有getter和setter(get,set)的东西。对于每个 var
属性,我们不需要明确指定的 get 和 set 方法的默认提供者。
但是,当使用 by
关键字时,您是在声明这个 getter/getter&setter 是在其他地方提供的(即它已被委托(delegate))。 提供了byby
之后的函数。
因此,您不是使用内置的 get 和 set 方法,而是将该作业委托(delegate)给某个显式函数。
一个非常常见的例子是 bylazy
用于延迟加载属性。
此外,如果您使用像 Koin 这样的依赖注入(inject)库,您会看到许多属性定义如下:
var myRepository: MyRepository by inject() //inject is a function from Koin
在类定义中,它遵循相同的原则,它定义了某些功能的提供位置,但它可以引用任何一组方法/属性,而不仅仅是get和set。
class MyClass: SomeInterface by SomeImplementation, SomeOtherInterface
这段代码是说:
'我是 MyClass 类,我提供 SomeImplementation 提供的接口(interface) SomeInterface 的功能。
我会自己实现 SomeOtherInterface (这是隐含的,所以没有 by
那里)。'
关于kotlin - 'by' 关键字在 Kotlin 中的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38250022/