繁体   English   中英

java: super.clone() 与 Jackon ObjectMapper

[英]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 中实现克隆。 也有帮助。

Java 的clone方法和 Jackson 没有任何关系。 所以你甚至不需要实现一个clone方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM