我正在尝试做这样的事情:
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是不兼容的类型。
我做错了什么?
答案 0 :(得分:2)
如果我们看一下classType
的定义:
def classType[T](clazz: Predef.Class[_]): Manifest[T] =
new ClassTypeManifest[T](None, clazz, Nil)
我们可以看到T
不是从参数推断的,因此只能从返回类型推断,或者通过显式给出type参数。以下内容应解决您的问题:
override val manifest = Manifest.classType[User](User.getClass)
可替换地:
override val manifest: Manifest[User] = Manifest.classType(User.getClass)