【问题标题】:cannot find class manifest for element type T找不到元素类型 T 的类清单
【发布时间】:2025-12-11 21:45:02
【问题描述】:

试图从this SO question 编译一些代码并遇到此错误消息cannot find class manifest for element type T。这是另一个显示该行为的 sn-p:

scala> def f[T](a:T, b:T):Array[T] = { new Array[T](2) }
<console>:4: error: cannot find class manifest for element type T
       def f[T](a:T, b:T):Array[T] = { new Array[T](2) }

我可以看到new collection.mutable.GenericArray[T](2) 解决了这个问题。显然提供清单是另一种选择......但是“提供清单意味着”是什么意思?

【问题讨论】:

  • 请注意,在 Scala 2.8 final 中,GenericArray 已重命名为 ArraySeq。

标签: scala scala-2.8


【解决方案1】:

要提供类型信息,您可以使用上下文绑定

def f[T : Manifest](a:T, b:T):Array[T] = { new Array[T](2) }

或作为隐含参数的清单:

def f[T](a:T, b:T)(implicit manifest : Manifest[T]) : Array[T] = { new Array[T](2) }

前者是后者的语法糖。 manifest 是必需的,因为 T 的类型信息由于 JVM 的泛型 type errasure 而丢失。

【讨论】:

最近更新 更多