gpt4 book ai didi

kotlin - 如何使用 Observable.zip 保存类型?

转载 作者:行者123 更新时间:2023-12-02 13:09:28 25 4
gpt4 key购买 nike

我正在申请Observable.zip到可观察的列表。它可以工作,但我希望它可以保存类型信息。问题发生在下面的代码片段中:

    val observable1 = Observable.fromArray(1, 2, 3)
val observable2 = Observable.fromArray(1, 2, 3)

// result is a Array<Any>. Could it be an Array<Int> instead ?
val result = Observable.zip(listOf(observable1, observable2), {a -> a}).blockingFirst()

感觉就像 zip应该能够知道我的项目是 Int 类型的。在这个非常具体的情况下,我当然可以转换,但我也有更复杂的类型,如果我能保存类型会感觉更好。我错过了什么吗?

最佳答案

不幸的是,Java(和 Kotlin)类型系统不允许您(或我们的库编写者)进行这种类型保存;您必须手动回退 a Object[]元素到它们各自的类型。

这是使用 2-9 参数 zip() 为您完成的。 overloadszipWith实例运算符。

根本问题是无法创建泛型数组以及类型删除本身。如果我们允许 Function<T[], R>在签名中,我们仍然需要创建 new Object[]用于调用。但是,您的 Function<Integer[], R>实现将尝试强制转换 Object[]进入 Integer[]这是不允许的,并且失败了 ClassCastException .

这也在 zip javadoc 中有所描述。 :

Note on method signature: since Java doesn't allow creating a generic array with new T[], the implementation of this operator has to create an Object[] instead. Unfortunately, a Function<Integer[], R> passed to the method would trigger a ClassCastException.

关于kotlin - 如何使用 Observable.zip 保存类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48323403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com