java: super.clone() with Jackon ObjectMapper



所以我理解在实现clone()方法时,应该首先调用super.clone(),这样(潜在的(超级类就可以完成它的任务,然后进行自己的克隆。这一切都确保了没有来自超类的变量被列出/克隆。

现在,如果我使用Jacksons ObjectMapper进行克隆:
return objectMapper.readValue(objectMapper.writeValueAsString(this), Mail.class);
我决定这样做,因为我的对象(Mail(已经可以完全转换为json和json,不管怎样,json基本上就是克隆
在这种情况下,调用super.clone((是没有用的,对吗?Jackson无论如何都会复制超级变量,当它以这种方式设置时,super.clone()的结果不会起任何作用。

我是不是错过了什么?

问候,
Chris

在这种情况下,调用super.clone((是无用的,对吧?

不安静。Jackson将在后台执行所有操作以正确实例化对象,但仅基于公共字段或您已配置为可序列化为JSON的字段有关专用字段的信息将丢失

class A {
public int x = 10;
private int y = 100; // this info will be lost when cloning with Jackson
}

虽然这种方法在小项目上完全可行。我认为,如果你把它作为一个大的克隆方法,它会产生太多的开销。过多的去变现和串行化可能会变得昂贵。

您应该考虑使用代理模式在java中实现克隆。这也会有所帮助。

Java的clone方法和Jackson没有任何关系。因此,您甚至不需要实现clone方法。

序列化和反序列化对象一直是复制对象的常用方法。请记住,它也有缺点。

最新更新