我正在使用Array
的非可选值,并且希望它们保持非可选值,但是由于{{3}中所述的问题,我无法使用Array
的默认构造函数}}。
此外,链接中描述的.also{}
技巧对我不起作用,因为我的不是具有自己的特殊WhateverArray
类的某种原始类型的数组。
是否有一些Kotlin技巧可以用来初始化下面的a
?还是我必须建立一些列表然后进行转换?
// please assume Stream<MyNonprimitiveType> magically gives me
// size() -> Int and
// next() -> MyNonprimitiveType
val stream : Stream<MyNonprimitiveType> = Stream<MyNonprimitiveType>()
val size : Int = stream.size()
val a : Array<MyNonprimitiveType> = ??? // use stream.next()
答案 0 :(得分:2)
这是一个完整的示例,可以在不使用临时列表的情况下完成您想要的操作:
class Stream<T>(private val list: List<T>) {
val size = list.size;
private val it = list.iterator()
fun next(): T {
return it.next()
}
}
inline fun <reified T: Any> Stream<T>.toArray(): Array<T> {
val tmp: Array<T?> = arrayOfNulls(size)
for (i in 0 until size) {
tmp[i] = next()
}
return tmp as Array<T>
}
fun main() {
val stream : Stream<String> = Stream(listOf("a", "b"))
val a: Array<String> = stream.toArray()
println(Arrays.toString(a))
}