我有一个使用大量Java代码的Scala项目,例如这个Java源代码:
public enum Category { FOO, BAR };
然后我有一堆Scala案例类,我使用Argonaut与JSON串行,如下所示:
case class Thing (a: String, b: Int, c: Float)
object Thing {
implicit val j = casecodec3 (Thing.apply, Thing.unapply)("a", "b", "c")
implicit val e: Equal[Guild] = Equal.equal (_ == _)
}
很好,现在我想编写一个使用Java枚举的Scala案例类:
case class Thing (a: String, b: Int, c: Float, d: Category)
object Thing {
implicit val j = casecodec4 (Thing.apply, Thing.unapply)("a", "b", "c", "d")
implicit val e: Equal[Guild] = Equal.equal (_ == _)
}
这将产生编译错误,因为类别枚举没有隐式编解码器。
我想我可以编写自己的编解码器专门用于处理类别枚举,通过这样做:
package object ArgonautImplicits {
implicit val dx: DecodeJson[Category] = StringDecodeJson.map(x => Category.valueOf(x))
implicit val ex: EncodeJson[Category] = EncodeJson(x => jString(x.toString))
}
但我想知道是否有办法编写一个能自动处理任何Java枚举的编解码器。