1

コンパイラは言う

error: ambiguous reference to overloaded definition,
both method unapply in object UserDto of type (in: Any)Option[(String, String, String, String)]
and  method unapply in class AbstractJsonConversion of type (in: net.liftweb.json.JsonAST.JValue)Option[biz.shopboard.domain.model.UserDto]
match argument types (net.liftweb.json.JsonAST.JValue)
case Nil JsonPut UserDto(user) -> _ => {

コードは次のようになります (Scala + Lift)

serve("api" / "user" prefix {
    // PUT adds the item if the JSON is parsable
    case Nil JsonPut UserDto(user) -> _ => {
      facade.saveUser(user)
      user: JValue
    }
}

case class UserDto(username: String, password: String, firstName: String, lastName: String)

object UserDto extends AbstractJsonConversion[UserDto] {
  /**
   * The default unapply method for the case class.
   * We needed to replicate it here because we
   * have overloaded unapply methods
   */
  def unapply(in: Any): Option[(String, String, String, String)] = {
    in match {
      case i: UserDto => Some((i.username, i.password, i.firstName, i.lastName))
      case _ => None
    }
  }

}

AbstractJsonConversion は次のようになります

package biz.shopboard.domain

import net.liftweb.json.JsonAST.JValue
import net.liftweb.common.Box
import net.liftweb.util.Helpers
import net.liftweb.json.Extraction

class AbstractJsonConversion[T](implicit M: Manifest[T]) {

  implicit val formats = net.liftweb.json.DefaultFormats

  /**
   * Convert a JValue to a User if possible
   */
  def apply(in: JValue): Box[T] = Helpers.tryo { in.extract[T] }

  /**
   * Extract a JValue to an Item
   */
  def unapply(in: JValue): Option[T] = apply(in)

  /**
   * Convert the item to JSON format.  This is
   * implicit and in the companion object, so
   * an Item can be returned easily from a JSON call
   */
  implicit def toJson(item: T): JValue = Extraction.decompose(item)
}

オーバーロードされた unapply メソッドを親クラス AbstractJsonConversion からコンパニオン オブジェクト UserDto に移動すると、すべて問題ありません。

私はここで何が間違っているのだろうか?親クラス AbstractJsonConversion でオーバーロードされたメソッド unapply と、その子コンパニオン オブジェクトで別のメソッドを使用できないのはなぜですか?

4

0 に答える 0