如何将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有问题。 TT? 都是可空的。 为了解决这个问题,将方法签名更改为fun <T : Any> computeMyThing(): List<T> ,您将能够使用array.filterNotNull()而不用自己声明它。