Scala泛型隐式val
我的程序中有很多enum到json转换的隐式val,如下所示:Scala泛型隐式val,scala,generics,implicit,Scala,Generics,Implicit,我的程序中有很多enum到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) }
implicit val format = new Format[AuthRoleIndividual] {
def reads(json: JsValue) = JsSuccess(AuthRoleIndividual.withName(json.as[String]))
def writes(myEnum: AuthRoleIndividual) = JsString(myEnum.toString)
}
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)
}
注意:AuthRoleIndividual
扩展了枚举
。我的方法是这样写:
implicit val format = new Format[AuthRoleIndividual] {
def reads(json: JsValue) = JsSuccess(AuthRoleIndividual.withName(json.as[String]))
def writes(myEnum: AuthRoleIndividual) = JsString(myEnum.toString)
}
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)
}
隐式val格式[T首先,您误解了枚举
值的类型,对于枚举
值,值的类型是值
类型而不是枚举
,因此您应该为值
类型绑定隐式
。例如:
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
其次,正如上面的代码一样,由于值
类型绑定到对象
(State.Value
),因此您无法按照Play JSON已经提供的方式为所有枚举创建泛型隐式,对于枚举,非常感谢您的澄清!