Scala 泛型隐式 val

Scala generic implicit val

我的程序中有很多枚举到 json 转换的隐式 val,例如:

implicit val format = new Format[AuthRoleIndividual] {
    def reads(json: JsValue) = JsSuccess(AuthRoleIndividual.withName(json.as[String]))
    def writes(myEnum: AuthRoleIndividual) = JsString(myEnum.toString)
  }

注意:AuthRoleIndividual 扩展了 Enumeration。我的方法是写这样的东西:

implicit val format[T <: Enumeration] = new Format[T] {
    def reads(json: JsValue) = JsSuccess(T.withName(json.as[String]))
    def writes(myEnum: T) = JsString(myEnum.toString)
  }

但这是不可能的。有什么想法吗?

首先,您误解了Enumeration值的类型,对于Enumeration值,的类型不是Value类型Enumeration ,因此您应该将 implicit 绑定为 Value 类型。例如:

  object State extends Enumeration {
    val A = Value("A")
    val B = Value("B")
  }

  implicit def foo(v: State.Value): String = v.toString + "-Bar"

  val t: String = State.A

其次,如上代码,由于Value类型绑定到object(State.value),你不能创建generic implicits 所有 Enumeration.