You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin自定义sealed List实现泛型drop方法时泛型类型不匹配问题

问题原因

这个问题不是Kotlin局部函数不支持复用泛型类型导致的,核心原因是泛型参数重名引发的屏蔽问题:

  • 你在List类头部已经声明了类级别的泛型参数<out A>,类内所有成员默认都可以直接复用这个泛型
  • 你在定义drop方法时额外加了<A>声明,相当于给drop方法单独定义了一个和类泛型重名的新泛型参数,二者是完全独立的两个类型,因此IDE会提示A#1(方法的泛型A)和A#2(类的泛型A)类型不匹配。
解决方法

直接删除drop方法前额外声明的泛型参数<A>即可,方法可以直接复用类层面定义的泛型A,局部函数go也可以直接访问这个泛型,无需额外声明:

sealed class List<out A> {
  
    fun drop(n: Int): List<A> {
        fun go(n: Int, l: List<A>): List<A> = when (n) {
                0 -> l
                else -> go(n - 1, l.tail())
        }
        return go(n, this)
    }
}

内容的提问来源于stack exchange,提问作者jimgug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 05:45:01