我想做这样的事情:
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
}
但是它似乎不工作,它说我的Manifest是不兼容的类型。
我做错了什么?
如果我们看看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)