为什么在反序列化到案例类实例之后,结构相等比较会受到案例类定义的位置是在另一个类的内部还是外部的影响。例如,以下代码段中的断言
package example
import org.json4s.DefaultFormats
import org.json4s.native.JsonMethods.parse
class Foo {
case class Person(name: String)
def bar = {
implicit val formats = DefaultFormats
val expected = Person(name = "picard")
val actual = parse("""{"name": "picard"}""").extract[Person]
assert(expected == actual, s"$expected == $actual")
}
}
object Main extends App {
(new Foo).bar
}
失败
`java.lang.AssertionError: assertion failed: Person(picard) == Person(picard)`
如果我们移动它就会过去
Person
外定义class Foo
像这样case class Person(name: String)
class Foo {
def bar = {
...
assert(expected == actual, s"$expected == $actual")
}
}
请注意,在这两种情况下,反序列化似乎都是成功的,例如,
assert(expected.name == actual.name)
不管
case class Person
都满意定义位置。也许它在某种程度上受到了隐含的
Manifest
的影响。传递给 extract
?
最佳答案
这是一个错误。
https://github.com/json4s/json4s/issues/564
“反序列化的内部案例类无法与代码中初始化的案例类进行比较”
关于scala - 反序列化后受案例类定义位置影响的结构相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55890176/