当前位置: 首页 > 知识库问答 >
问题:

Kotlin中的'by'关键字是做什么的?

顾嘉良
2023-03-14

在为android开发时,我有时会遇到类似这样的事情:

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

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

共有1个答案

公孙志尚
2023-03-14

简单地说,您可以理解by关键字。

从属性使用者的角度来看,val是具有getter(get)的东西,var是具有getter和setter(get,set)的东西。对于每个var属性,都有一个不需要显式指定的get和set方法的默认提供程序。

但是,当使用by关键字时,您说明这个getter/getter&setter是在其他地方提供的(即它已经被委托)。它由by后面的函数提供。

一个非常常见的例子是用于惰性加载属性的by lazy。另外,如果您正在使用依赖注入库(如Koin),您将看到许多定义如下的属性:

var myRepository: MyRepository by inject()  //inject is a function from Koin

在类定义中,它遵循同样的原则,它定义某个函数的提供位置,但它可以引用任何方法/属性集,而不仅仅是get和set。

class MyClass: SomeInterface by SomeImplementation, SomeOtherInterface

这段代码是这样说的:“我是类,我的类,我提供由某个实现提供的接口、某个接口的函数。我将自己实现另一个接口(这是隐式的,所以没有by)。“

 类似资料:
  • 我们可以编写包含或不包含的代码,如下所示。 或 的实际用途是什么?。这是内存效率更高还是可读性更强?

  • 问题内容: 在JavaScript中的关键字可能会相当混乱首次遇到它的时候,人们往往会认为JavaScript是不是面向对象的编程语言。 它是什么? 它解决什么问题? 什么时候合适,什么时候不合适? 问题答案: 它做五件事: 它创建一个新对象。这个对象的类型就是 object 。 它将这个新对象的内部不可访问的 [[prototype]] (即 proto )属性设置为构造函数的外部可访问 原型

  • 问题内容: 来自标准库的文件包含围绕228行的以下几行代码: 在这种情况下是什么意思,或者通常是什么关键字? 问题答案: 是Swift 3中的新访问级别,随实现而引入 SE-0117允许区分公共访问权限和公共替代权限 从2016年8月7日开始,Swift 3快照和Xcode 8 beta 6都可以使用它。 简而言之: 在定义模块之外, 可以访问 和 可继承 一个类。一类成员是 可访问 和 可重写

  • 我仍然在考虑Kotlin中的coroutines,但我想知道这是否对我的问题有些矫枉过正,即在返回数据时立即更新文本视图。异常处理使回调变得非常丑陋,我想尽可能避免这些 suspend关键字是否仅仅意味着运行库可能会挂起一个需要一段时间才能完成的函数?还是只在coroutine内启用挂起?作为一个假设,我能写吗 是否知道,如果下载了1 GB的数据,将同时调用,而则等待由填充?

  • 问题内容: Java中的原生关键字是什么? 问题答案: 述关键字被应用于方法,以指示该方法是在本机代码使用JNI(Java本地接口)来实现。

  • 问题内容: 新的SwiftUI教程具有以下代码: 第二行单词和在其网站上被高亮显示,就像它是一个关键字一样。 Swift 5.1似乎没有作为关键字,而且我也看不出该词还有什么其他用处,因为它通常位于类型所在的位置。是否有Swift的未发布新版本?以某种我不知道的方式在类型上使用的函数吗? 关键字有什么作用? 问题答案: 是SE-0244引入的不透明结果类型,在带有Xcode 11的Swift 5.