java - java: 带有 Jackon ObjectMapper 的 super.clone()
问题描述
所以我理解在实现该clone()
方法时,您应该首先调用super.clone()
以便(潜在的)超类可以做它的事情,然后进行自己的克隆。这一切都确保了超类中的变量不是列表/不克隆。
现在如果我使用 Jacksons ObjectMapper 进行克隆怎么办:我
return objectMapper.readValue(objectMapper.writeValueAsString(this), Mail.class);
决定这样做,因为我的对象(
在这种情况下调用 super.clone() 是没用的,对吧?无论如何,杰克逊都会在以这种方式设置超级变量时制作一个副本,因此结果不会做任何事情。Mail
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
}
虽然这种方法非常适用于小型项目。我认为,如果将其用作大型克隆方法,则会产生太多开销。过多的去实体化和序列化会变得昂贵。
推荐阅读
- mysql - 使用日期作为返回空白行的参数的 SQL 存储过程?
- fork - "gnome-terminal --" 退出并终止所有分叉
- python - 如何故意在 scikit-learn 中过度拟合决策树?
- bash - 如何停止 if 语句执行命令 bash?
- java - C# Bouncy Castle 中的 RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING - 输入对于 RSA 密码来说太大
- bootstrap-4 - 在引导模式弹出窗口上使用鼠标进行标记选择问题
- python - Django 不提供静态文件,也不对任何东西进行样式化
- selenium - Selenium 并行执行
- python - 如何在数据框中找到两个未知值?查找值求解器
- python - 如何为 protobuf 中的可选消息字段赋值?