我的程序中有很多用于枚举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)
}
但那是不可能的。有什么想法吗?
答案 0 :(得分:1)
首先,您误解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
),因此您无法创建通用含义适用于所有Enumeration
。