为何Kotlin中向接收Any的函数传List会编译报错?
为什么Kotlin中emptyList()无法直接传给接收Any类型的函数?
这个编译错误的核心和Any本身无关,问题出在emptyList()的泛型特性上:
emptyList()是泛型函数,签名为fun <T> emptyList(): List<T>,编译器必须明确推断出类型参数T的具体类型才能生成有效代码。- 传入字符串、数字这类具体类型时,编译器能直接确定类型;但
emptyList()本身没携带任何类型信息,而Any是所有类型的父类,编译器没法判断你需要的是List<Any>还是其他具体类型的List,因此抛出“Not enough information to infer type variable T”的错误。 - 虽然Kotlin的
Any等价于Java的Object,但泛型的类型推断逻辑不会自动把emptyList()默认推断为List<Any>,必须显式给出类型提示。
解决方法
- 显式指定泛型类型:
fun other() { fu(emptyList<Any>()) }
- 先将list赋值给带明确类型的变量,再传递:
fun other() { val empty: List<Any> = emptyList() fu(empty) }
内容的提问来源于stack exchange,提问作者mykola
相关产品推荐
相关产品推荐

