特质为另一个特征提供了清单

时间:2013-01-14 23:30:05

标签: scala manifest traits

我正在尝试做这样的事情:

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是不兼容的类型。

我做错了什么?

1 个答案:

答案 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)