将 Java Collection.toArray 转换为 kotlin



请帮我把这个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

  1. 在主菜单上,指向"代码"菜单。
  2. 选择将 Java 文件转换为 Kotlin 文件。
  3. 做。

在您的情况下,它会转换为:

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没有推断类型,它是一个显式的强制转换。

最新更新