用于解构的Kotlin四倍,五倍等
我正在寻找一种干净的方式来在线创建可破坏的对象. 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 正如您所看到的,这些是 回答 因此,只要您需要三个以上的数据,就可以继续使用数据类. 例如,一个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(我的). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |