2013-01-14 50 views
0

我試圖做這樣的事情:特質提供艙單另一個特點

trait BaseMongoDAO[T <: IdentifiableModel with CaseClass] { 


    implicit val manifest: Manifest[T] 

    ........ some implicit manifest usage here 
} 


trait MongoUserRepository extends BaseMongoDAO[User] with UserRepository { 

    override val manifest = Manifest.classType(User.getClass) 

    ........ implementing UserRepository here 

} 

但它似乎沒有工作,它說我的清單是不兼容的類型。

我做錯了什麼?

回答

2

如果我們看一下classType定義:

def classType[T](clazz: Predef.Class[_]): Manifest[T] = 
    new ClassTypeManifest[T](None, clazz, Nil) 

我們可以看到,T不從參數推斷,因此只能從返回類型推斷,或通過明確給出此類型參數。以下應解決您的問題:

override val manifest = Manifest.classType[User](User.getClass) 

或者:

override val manifest: Manifest[User] = Manifest.classType(User.getClass)