[英]java: super.clone() with Jackon ObjectMapper
所以我理解在实现clone()
方法时,你应该首先调用super.clone()
以便(潜在的)超类可以做它的事情,然后做你自己的克隆。 这一切确保来自超类的变量不是列表/未克隆。
现在如果我使用 Jacksons ObjectMapper 进行克隆会怎样:
return objectMapper.readValue(objectMapper.writeValueAsString(this), Mail.class);
我决定这样做,因为我的对象( Mail
)已经完全可以与 json 相互转换,这基本上是克隆。
在这种情况下调用 super.clone() 是没有用的对吗? 当以这种方式设置时,杰克逊无论如何都会复制超级变量,因此super.clone()
的结果不会做任何事情。
我在这里错过了什么吗?
问候,
克里斯
在这种情况下调用 super.clone() 是没有用的对吗?
不安静。 Jackson
将在幕后做所有事情来正确实例化您的对象,但仅基于公共字段或您已配置为可序列化为 JSON 的字段。 有关私有字段的信息将丢失。
class A {
public int x = 10;
private int y = 100; // this info will be lost when cloning with Jackson
}
虽然这种方法在小型项目上是完全可行的。 我认为,如果将其用作大型方法的克隆方法,则会产生过多的开销。 太多的去现实化和序列化会变得昂贵。
Java 的clone
方法和 Jackson 没有任何关系。 所以你甚至不需要实现一个clone
方法。
序列化和反序列化对象一直是复制对象的常用方法。 请记住,它也有缺点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.