17

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

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)解决了这个问题。显然提供清单是另一种选择......但是“提供清单意味着”是什么?

4

1 回答 1

19

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

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) }

前者是后者的语法糖。需要清单是因为 T的类型信息由于 JVM 的泛型类型错误而丢失。

于 2010-02-12T15:22:46.817 回答