2014-05-15 91 views
0

我對Manifest類型不熟悉。 Jackson庫使用這種類型,即在ObjectMapper中。因此,考慮這種方法:如何在需要Manifest類型時使用匿名類型

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) 

有人可以在這裏解釋這個問題嗎?我真的必須爲該類型創建適當的類嗎?

回答

2

我已經回答了你的問題在Manifest error for anonymous type

Looks like這是不可能的體現。您應該改用 TypeTag。像這樣:

import scala.reflect.runtime.universe._ 
object GenericSerializer 
{ 
    def apply[T <:AnyRef]()(implicit tag: TypeTag[T]) = {} 
}