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

}

但它似乎不起作用,它说我的清单是不兼容的类型。

我做错事情了?

4

1 回答 1

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)
于 2013-01-14T23:36:26.903 回答