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

Scala调用test函数时自定义List与标准库List类型不匹配报错

错误原因
  • 核心是命名冲突:你自定义的List特质和Scala默认全局导入的scala.collection.immutable.List重名,两个是完全独立、无继承关系的不同类型。
  • 你定义test函数时声明的入参List[Int],编译器默认匹配当前上下文你自己写的自定义List类型;但你创建val example3 = List(1,2,3,4,5)时,编译器默认调用标准库List的伴生对象构造实例,所以生成的是标准库List类型,和入参要求的自定义List类型不匹配。
  • 报错信息里的List(in class $iw)[Int]就是指代当前代码作用域下你自定义的List类型。
解决方案
  • 方案1:用你自定义的List实现类直接构造实例:
    val example3 = Cons(1, Cons(2, Cons(3, Cons(4, Cons(5, Nil)))))
    
  • 方案2:隐藏标准库的List导入,避免命名冲突,在代码文件最开头添加:
    import scala.collection.immutable.{List => _, _}
    
  • 方案3:创建变量时显式标注类型,让编译器优先匹配符合类型的构造方式:
    val example3: List[Int] = List(1,2,3,4,5)
    

注意:如果你还没有实现自定义List伴生对象的多参数apply方法,即使解决了命名冲突,直接调用List(1,2,3,4,5)也会报错,需要先补全伴生对象的构造逻辑,示例如下:

object List {
  def apply[A](elems: A*): List[A] = {
    if (elems.isEmpty) Nil
    else Cons(elems.head, apply(elems.tail: _*))
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:48:01