私は演劇を書いています!ReactiveMongo を使用した 2.1 アプリケーション。各永続化可能なケース クラスには、BSONReader[...] と BSONWriter[...] を実装する 2 つの暗黙的なオブジェクトを保持するオブジェクトがあり、各ケース クラスにはこれらを返すメソッドがあります。
trait Persistable {
implicit def getReader: BSONReader[Persistable]
implicit def getWriter: BSONWriter[Persistable]
val collectionName: String
}
case class MyObj () extends Persistable {
override val collectionName: String = MyObj.collectionName
override def getReader: BSONReader[MyObj] = MyObj.MyObjBSONReader
override def getWriter: BSONWriter[MyObj] = MyObj.MyObjBSONWriter
}
object MyObj{
val collectionName: String = "MyObj"
implicit object MyObjBSONReader extends BSONReader[MyObj] {
def fromBSON(document: BSONDocument): MyObj = {
val doc = document.toTraversable
new MyObj(
)
}
}
implicit object MyObjBSONWriter extends BSONWriter[MyObj] {
def toBSON(myObj: MyObj) = {
BSONDocument(
)
}
}
何らかの理由で、getReader は正常に動作しているように見えますが、getWriter エラー:
タイプ = reactmongo.bson.handlers.BSONWriter[models.persistable.Persistable]; の trait Persistable のメソッド getWriter をオーバーライドします。メソッド getWriter に互換性のない型があります
私は何を間違っていますか?どちらも同様の署名を持っているようです。別のヒントは、getWriter から戻り値の型を削除すると、Eclipse でコンパイル時エラーが発生することです。
型の不一致; 見つかった:models.persistable.MyObj.MyObjBSONWriter.typeが必要:reactivemongo.bson.handlers.BSONWriter[models.persistable.Persistable]
更新:
私は@AndrzejDoyleが以下に言ったようにしましたが、この演習の中心であるPersisterの実装は不平を言います:
def insert(persistable: Persistable) = {
val collection = db(persistable.collectionName)
import play.api.libs.concurrent.Execution.Implicits._
implicit val reader = persistable.getReader
implicit val writer = persistable.getWriter
collection.insert(persistable)
}
エラー:
trait Persistable は型パラメーターを受け取ります