本篇内容介绍了“Kotlin1.6.20新功能ContextReceivers怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在 Kotlin 中接受者只能应用在扩展函数或者带接受者 lambda 表达式中, 如下所示。接受者是 fun 关键字之后和点之前的类型 Context,这里隐藏了两个知识点。我们可以像调用内部函数一样,调用扩展函数 px2dp(),通常结合 Kot免费云主机域名lin 作用域函数 with , run , apply 等等一起使用。在扩展函数内部,我们可以使用 this 关键字,或者隐藏关键字隐式访问内部的成员函数,但是我们不能访问私有成员扩展函数使用起来很方便,我们可以对系统或者第三方库进行扩展,但是也有局限性。只能定义一个接受者,因此限制了它的可组合性,如果有多个接受者只能当做参数传递。比如我们调用 px2dp() 方法的同时,往 logcat 和 file 中写入日志。在 Kotlin 中接受者只能应用在扩展函数或者带接受者 lambda 表达式中,却不能在普通函数中使用,失去了灵活性Context Receivers 的出现带来新的可能性,它通过了组合的方式,将多个上下文接受者合并在一起,灵活性更高,应用范围更广。Context Receivers 用于表示一个基本约束,即在某些情况下需要在某些范围内才能完成的事情,它更加的灵活,可以通过组合的方式,组织上下文,将系统或者第三方类组合在一起,实现更多的功能。如果想在项目中使用 Context Receivers,需要将 Kotlin 插件升级到 1.6.20 ,并且在项目中开启才可以使用。当我们完成上述配置之后,就可以在项目中使用 Context Receivers,现在我们将上面的案例改造一下。我们在 printf() 函数上,使用 context() 关键字,在 context() 关键字括号中,声明上下文接收者类型的列表,多个类型用逗号分隔。但是列出的类型不允许重复,它们之间不允许有子类型关系。通过 context() 关键字来限制它的作用范围,在这个函数中,我们可以调用上下文 LogContext 、 FileContext 内部的方法,但是使用的时候,只能通过 Kotlin 作用域函数嵌套来传递多个接受者,也许在未来可能会提供更加优雅的方式。如果我们在 LogContext 和 FileContext 中声明了多个相同名字的变量或者函数,我们只能通过 this@Lable 语句来解决这个问题。正如你所见,在 LogContext 和 FileContext 中都有一个名为 name 的变量,我们只能通过 this@Lable 语句来访问,但是这样会引入一个新的问题,如果有大量的同名的变量或者函数,会导致 this 关键字分散到处都是,造成可读性很差。所以我们可以通过接口隔离的方式,来解决这个问题。通过接口隔离的方式,我们就可以解决 this 关键字导致的可读性差的问题,使用的时候需要实例化接口。当我们重写带有上下文接受者的函数时,必须声明为相同类型的上下文接受者。我们重写了 draw() 函数,声明的上下文接受者必须是相同的,Context Receivers 不仅可以作用在扩展函数、普通函数上,而且还可以作用在类上。在类 LogHelp 上使用了 context() 关键字,我们就可以在 LogHelp 范围内任意的地方使用 LogContext 或者 FileContex。Context Receivers 除了作用在扩展函数、普通函数、类上,还可以作用在属性 getter 和 setter 以及 lambda 表达式上。最后我们来看一下,来自社区 Context Receivers 实践的案例,扩展 Json 工具类。“Kotlin1.6.20新功能ContextReceivers怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!
本篇内容主要讲解“vue自定义过滤器的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue自定义过滤器的方法是什么”吧!1.首先,在vue-cli中创建一个vue.js项目;vue create proj…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。