为另一个trait提供Manifest的trait



我想做这样的事情:

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)

最新更新