我试过了:
fun <T> computeMyThing(): List<T> {
val array: Array<T?> = computeArray()
return array.toList()
}
但是,毫不奇怪,它不会编译。
答案 0 :(得分:4)
如果您确定数组中没有空值,则可以使用强制转换:
array.toList() as List<T>
如果实际上存在空值,则需要将其过滤掉:
array.filter { it != null } as List<T>
正如你所看到的,你仍然需要施展。您还可以编写一个扩展方法来过滤掉空值并返回正确的类型:
fun <T> Array<T?>.filterNotNull(): List<T> {
val destination = arrayListOf<T>()
for (element in this) {
if (element != null) {
destination.add(element)
}
}
return destination
}
然后您可以这样使用它:
array.filterNotNull()
编辑:Kotlin中已有filterNotNull
方法。 IDE没有建议它,因为类型参数T
存在问题。 T
和T?
都可以为空。要解决此问题,请将方法签名更改为fun <T : Any> computeMyThing(): List<T>
,然后您就可以使用array.filterNotNull()
而无需自行声明。