0

私は演劇を書いています!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 は型パラメーターを受け取ります

4

1 に答える 1