kotlin - 'by' 关键字在 Kotlin 中的作用是什么?

在为 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/

相关文章:

kotlin - 函数定义: fun vs val

java - Kotlin 获取类型为字符串

java - 为 Kotlin 创建 POJO 类

kotlin - Kotlin 中的交换函数

input - 在 Kotlin 中读取控制台输入

android - 产品 flavor : Duplicate class found

file - 在 Kotlin 中递归列出文件

android - 如何像在 Swift 中一样从 Kotlin 中的函数返回多个值?

java - 如何在 Java 中访问 Kotlin 伴随对象?

android - 类 'MyFirebaseMessagingService' 不是抽象的,也没有