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