我不熟悉Manifest类型。 Jackson库使用这种类型,即在ObjectMapper中。所以给出了这个方法:
def fromJson[T: Manifest](jsonInputStream: InputStream): T
我试图用匿名类型调用它:
....fromJson[{val numRounds: Int; val numSeconds: Int }](json)
但是我遇到了编译错误。
[error] found : scala.reflect.Manifest[Object]
[error] required: Manifest[AnyRef{val numRounds: Int; val numSeconds: Int}]
[error] Note: Object >: AnyRef{val numRounds: Int; val numSeconds: Int}, but trait Manifest is invariant in type T.
[error] You may wish to investigate a wildcard type such as `_ >: AnyRef{val numRounds: Int; val numSeconds: Int}`. (SLS 3.2.10)
[error] val d = jsonParser.fromJson[{val numRounds: Int; val numSeconds: Int}](json)
有人可以解释这个问题吗?我真的必须为该类型创建一个合适的类吗?
答案 0 :(得分:2)
我已在Manifest error for anonymous type中回答了您的问题:
Looks like清单不可能。你应该用 而是
TypeTag
。像这样:import scala.reflect.runtime.universe._ object GenericSerializer { def apply[T <:AnyRef]()(implicit tag: TypeTag[T]) = {} }