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

前端之家收集整理的这篇文章主要介绍了用于解构的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

正如您所看到的,这些是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(我的).

猜你在找的Java相关文章