如何将Array <T?>翻译为List <T>?
我试过这个:
fun <T> computeMyThing(): List<T> { val array: Array<T?> = computeArray() return array.toList() }
但是,毫不奇怪,它不会编译。
如果您确定数组中没有空值,则可以使用强制转换:
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()
而不用自己声明它。