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

 

问题描述:

在为 android 开发时,我有时会遇到如下情况:

var someModel: someViewModel by notNullAndObservable { vm ->
  ...
}

我不明白by关键字的意义是什么。


 

第 1 个答案:

Kotlin 参考中,您会发现
的两个用途by,第一个是委托属性,这是您在上面的用途:

有一些常见的属性,虽然我们可以在每次需要它们时手动实现它们,但一劳永逸地实现它们并放入库中会非常好。示例包括惰性属性:仅在首次访问时计算值,可观察属性:侦听器收到有关此属性更改的通知,将属性存储在地图中,而不是每个单独的字段中。

在这里,您将 getter/setter 委托给另一个完成工作并且可以包含公共代码的类。作为另一个例子,Kotlin 的一些依赖注入器通过委托 getter
从依赖注入引擎管理的实例注册表中接收值来支持此模型。

接口/类委托是另一种用途:

委托模式已被证明是实现继承的一个很好的替代方案,并且 Kotlin 本身就支持它,需要零样板代码。Derived 类可以从接口 Base
继承并将其所有公共方法委托给指定对象

在这里,您可以将接口委托给另一个实现,因此实现类只需要覆盖它想要更改的内容,而其余方法则委托回更完整的实现。

一个活生生的例子是Klutter
只读/不可变集合
,它们实际上只是将特定集合接口委托给另一个类,然后覆盖只读实现中需要不同的任何内容。无需手动委托所有其他方法即可节省大量工作。

Kotlin 语言参考 中涵盖了这两者
,从那里开始了解该语言的基本主题。


我在理解新的 CBV 的工作原理时遇到了一些麻烦。我的问题是,我需要登录所有视图,其中一些视图需要特定权限。在基于函数的视图中,我使用@permiss ...