我做了一个泛型DynamoFormat
,Scanamo
它将任何具有Circe
'sEncoder
并Decoder
定义为 Json 字符串的对象放入数据库中。
import com.gu.scanamo.DynamoFormat
import io.circe.parser.parse
import io.circe.syntax._
import io.circe.{Decoder, Encoder}
object JsonDynamoFormat {
def forType[T: Encoder: Decoder]: DynamoFormat[T] = DynamoFormat.coercedXmap[T, String, Exception] {
s => parse(s).flatMap(_.as[T]).fold(err => throw err, obj => obj)
} {
obj => obj.asJson.noSpaces
}
}
然后我添加了一个隐式转换(到相同的object JsonDynamoFormat
)来自动提供这些格式化程序。
implicit def jsonToFormat[T: Encoder: Decoder]: DynamoFormat[T] = JsonDynamoFormat.forType[T]
当我导入它时,编译器会成功解析格式化程序,但是在运行时我得到一个堆栈溢出JsonDynamoFormat
,其中调用jsonToFormat
和forType
交替无限:
Exception in thread "main" java.lang.StackOverflowError
at JsonDynamoFormat$.forType(JsonDynamoFormat.scala:12)
at JsonDynamoFormat$.jsonToFormat(JsonDynamoFormat.scala:9)
at JsonDynamoFormat$.forType(JsonDynamoFormat.scala:13)
at JsonDynamoFormat$.jsonToFormat(JsonDynamoFormat.scala:9)
...
我真的不明白这里发生了什么。任何人都可以对此有所了解吗?