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不可为的项目的列表。 因此,不匹配和编译器错误。