从Scala 2.7.2开始,有一些叫做ManifestJava类型擦除的解决方法.但是,如何Manifest确切地工作以及为什么/何时需要使用它?
Jorge Ortiz 的博客文章Manifests:Reified Types解释了其中的一些内容,但它没有解释如何将它与上下文界限一起使用.
那么ClassManifest,有什么区别Manifest?
我有一些代码(一个更大的程序的一部分,不能轻易地包含在这里),它有关于类型擦除的一些警告; 我怀疑我可以通过使用清单解决这些问题,但我不确定如何解决.
试图从这个SO问题编译一些代码并遇到此错误消息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) }
Run Code Online (Sandbox Code Playgroud)
我可以看到new collection.mutable.GenericArray[T](2)解决了这个问题.显然提供清单是另一种选择......但是"提供明显的意思"是什么?
对于以下功能:
def reverse[T](a: Array[T]): Array[T] = {
val b = new Array[T](a.length)
for (i <- 0 until a.length)
b(i) = a(a.length -i - 1)
b
}
Run Code Online (Sandbox Code Playgroud)
我从第2行得到"错误:无法找到元素类型T的类清单".
反正有没有解决这个问题?