请帮我把这个java代码转换为kotlin,我尝试了很多次,但我不能
ObjectStream<DocumentSample> bin
= ObjectStreamUtils.createObjectStream(categoryStreams.toArray(new ObjectStream[0]));
在 Kotlin 中,您可以使用 toTypedArray()
从List
获取Array
:
categoryStreams.toTypedArray() //Array<ObjectStream<DocumentSample>>
然后,您可以使用 spread 运算符为数组添加前缀并将其传递给 ObjectStreamUtils.createObjectStream()
:
val bin = ObjectStreamUtils.createObjectStream<DocumentSample>(*categoryStreams.toTypedArray())
假设 categoryStreams 对象是Collection
类型(List、Set 等)之一,你可以在它上面调用 kotlin 的扩展方法toTypedArray
来获取ObjectStream
数组:
这应该有效:
val bin = ObjectStreamUtils.createObjectStream(categoryStreams.toTypedArray())
如果该方法接受 ObjectStream 的 vararg,则可以使用 spread 运算符 *
将数组扩展到 vararg:
val bin = ObjectStreamUtils.createObjectStream(*categoryStreams.toTypedArray())
将 Java 文件转换为 Kotlin
- 在主菜单上,指向"代码"菜单。
- 选择将 Java 文件转换为 Kotlin 文件。
- 做。
在您的情况下,它会转换为:
val bin = ObjectStreamUtils.createObjectStream(categoryStreams.toArray(arrayOfNulls<ObjectStream>(0)))
var bin = ObjectStreamUtils.createObjectStream(categoryStreams.toArray(arrayOfNulls(0)))
上面的代码将您的代码转换为 Kotlin。
这听起来像是一个类型推断问题。 请尝试下面的代码。 我添加categoryStreams
的声明. 不确定如何在代码中声明它。 但这是查看 github 上的代码的合理声明。
val categoryStreams = arrayListOf<ObjectStream<DocumentSample>>()
val bin = ObjectStreamUtils.createObjectStream(categoryStreams.toArray(arrayOfNulls<ObjectStream<DocumentSample>>(0)))
这个想法是为推理提供正确的类型(转换器忽略了提供)。 最初的java没有推断类型,它是一个显式的强制转换。