尝试从this 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)
解决了这个问题。显然提供清单是另一种选择......但“提供清单意味着什么”?
答案 0 :(得分: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) }
前者是后者的语法糖。需要manifest,因为由于JVM的通用type errasure而缺少关于T的类型信息。