加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

用于解构的Kotlin四倍,五倍等

发布时间:2020-12-14 23:57:32 所属栏目:Java 来源:网络整理
导读:我正在寻找一种干净的方式来在线创建可破坏的对象. kotlin.Pair和kotlin.Triple涵盖了很多用例,但有时还需要传递更多的对象. 一个示例用例是RX的zip函数,其中几个I / O调用的结果需要映射到另一个对象: Single .zip(repositoryA.loadData(someId),repositor
我正在寻找一种干净的方式来在线创建可破坏的对象. kotlin.Pair和kotlin.Triple涵盖了很多用例,但有时还需要传递更多的对象.

一个示例用例是RX的zip函数,其中几个I / O调用的结果需要映射到另一个对象:

Single
    .zip(repositoryA.loadData(someId),repositoryB.loadData(someId),repositoryC.loadAll(),repositoryD.loadAll()),{ objectA,objectB,objectsC,objectsD -> /*some Kotlin magic*/ }
    )
    .map { (objectA,objectsD) -> /*do the mapping*/ }

我想弄清楚“一些Kotlin魔法”部分会发生什么.如果只有3个存储库,那就是

Triple(objectA,objectsC)

我是否需要为此创建一个新的数据类,以及任何n元组的情况,还是有另一种方法?

解决方法

基本

让我们看看解构是如何工作的:

Kotlin为此定义了一个约定,即componentX()运算符函数是许多地方在Kotlin中使用的约定原则的一个例子.编译器使用这些componentX()函数来初始化解构声明中的变量.

例如,在Pair< A,B>中.这些功能如下:

operator fun component1(): A = first 

operator fun component2(): B = second

正如您所看到的,这些是operators,特别处理的功能.
这些componentX()函数可以由开发人员提供,并由编译器自动生成数据类.对也是这样的数据类btw.

回答

因此,只要您需要三个以上的数据,就可以继续使用数据类.

例如,一个MultiComponent类定义如下:

data class MultiComponent(val x: Int,val y: Int,val z: Int,val a: Int,val b: Int,val c: Int)

将被编译为具有函数component1(),component2(),…,component6()的类,并且可以在解构声明中使用:

val (q,w,e,r,t,z) = MultiComponent(1,2,3,4,5,6)

有关Kotlin约定和解构的更多详细信息,请参见this blog post(我的).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读