将Java Collection.toArray转换为kotlin
请帮我把这个java代码转换成kotlin,我试了很多次,但是不行
ObjectStream<DocumentSample> bin = ObjectStreamUtils.createObjectStream(categoryStreams.toArray(new ObjectStream[0]));
假设categoryStreams对象是Collection
类型(List,Set等)之一,你可以调用kotlin的扩展方法toTypedArray
来得到一个ObjectStream
的数组:
这应该工作:
val bin = ObjectStreamUtils.createObjectStream(categoryStreams.toTypedArray())
如果方法接受ObjectStream的可变参数,那么可以使用传播运算符*
将参数传递给可变参数:
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。
在Kotlin中,您可以使用toTypedArray()
从List
获取Array
:
categoryStreams.toTypedArray() //Array<ObjectStream<DocumentSample>>
然后,可以使用spread运算符为数组添加前缀并将其传递给ObjectStreamUtils.createObjectStream()
:
val bin = ObjectStreamUtils.createObjectStream<DocumentSample>(*categoryStreams.toTypedArray())
这听起来像是一个类型推断问题。 尝试下面的代码。 我添加categoryStreams
的声明。 不知道如何在您的代码中声明。 但是从github上的代码看这是一个合理的声明。
val categoryStreams = arrayListOf<ObjectStream<DocumentSample>>() val bin = ObjectStreamUtils.createObjectStream(categoryStreams.toArray(arrayOfNulls<ObjectStream<DocumentSample>>(0)))
这个想法是提供正确的推断类型(转换器忽略提供)。 原来的java没有推断出类型,这是一个明确的演员。