kotlin列表上的filterNotNull具有genericstypes
这是工作:
val values: List = listOf("a", null, "b").filterNotNull()
这不工作:
fun nonNullValues(values: List): List = values.filterNotNull()
编译器抱怨genericstypes:
Error:(8, 63) Kotlin: Type parameter bound for T in fun kotlin.collections.Iterable.filterNotNull(): kotlin.collections.List is not satisfied: inferred type A is not a subtype of kotlin.Any
这一个工作:
fun nonNullValues(values: List): List = values.filterNotNull()
有人可以请解释我为什么我需要告诉编译器,A是Any的子types? 我在想每个types都是Any的子types…
谢谢!
根据Kotlin文档 :
默认的上限(如果没有指定)是
Any?
这意味着有问题的声明等同于:
fun nonNullValues(values: List): List = values.filterNotNull()
nonNullValues
方法声明返回typesA
的可为空的项目的列表,而filterNotNull
返回typesA
的不可为的项目的列表。 因此,不匹配和编译器错误。