问题
Was trying to compile some code from this SO question and run into this error message cannot find class manifest for element type T
. Here is another snippet that shows the behavior:
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) }
I can see that new collection.mutable.GenericArray[T](2)
fixes the issue. Apparently providing a manifest is the other option... But what does "providing a manifest mean"?
回答1:
To provide type information you can use a context bound
def f[T : Manifest](a:T, b:T):Array[T] = { new Array[T](2) }
or the manifest as an implicit argument:
def f[T](a:T, b:T)(implicit manifest : Manifest[T]) : Array[T] = { new Array[T](2) }
The former is syntactic sugar for the later. The manifest is needed because the type information about T is missing due to generic type errasure of the JVM.
来源:https://stackoverflow.com/questions/2252641/cannot-find-class-manifest-for-element-type-t