如何将Array <t?>转换为List <t>?

时间:2015-11-10 18:36:50

标签: kotlin

我试过了:

fun <T> computeMyThing(): List<T> {
    val array: Array<T?> = computeArray()
    return array.toList()
}

但是,毫不奇怪,它不会编译。

1 个答案:

答案 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存在问题。 TT?都可以为空。要解决此问题,请将方法签名更改为fun <T : Any> computeMyThing(): List<T>,然后您就可以使用array.filterNotNull()而无需自行声明。