因此,我理解在实现clone()
方法时,应该首先调用super.clone()
,这样(潜在的)超类就可以完成它的工作,然后进行自己的克隆。这一切都确保超类中的非变量是列表/非克隆的。
现在,如果我使用Jacksons ObjectMapper进行克隆:返回ObjectMapper.readvalue(ObjectMapper.writeValueasString(this),mail.class);
我决定这样做,因为我的对象(mail
)已经完全可以与json进行转换,json基本上就是在克隆。
在这种情况下调用super.clone()是没有用的,对吧?Jackson无论如何都会在以这种方式设置超级变量时创建一个副本,这样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中用于继承的方法的快速问题-在哪里我从按钮一直到父类中调用该方法。 该方法应该返回该对象的副本,但是如果我在继承继承中有三个类并调用三次,为什么继承继承中的最高类(仅在Object类下)获取该类的副本回来? 假设我们有三个类:A,B和C,其中A-> B-> C(继承=->) 然后,在类C中进行调用,在B中进行调用,在B中进行调用,在A中进行调用,这将调用“这次Obj
问题内容: 关于它们有很多传说。我想知道真相。以下两个示例之间有什么区别? 问题答案: 不确定从何处获得传说,但: 提交按钮 与: IE6将在标记之间提交此按钮的所有文本,其他浏览器将仅提交值。使用可使您在按钮的设计上享有更大的布局自由度。从各种意图和目的看,它乍一看似乎很棒,但是各种浏览器怪癖使它有时很难使用。 在您的示例中,IE6将发送到服务器,而其他大多数浏览器将不发送任何内容。要使其跨浏览
什么区别以及如何正确重写代码?
我试图理解为什么下面两个代码块会产生不同的结果。 代码块1按预期工作,并返回从数据库中查找的提供程序的数组。另一方面,代码块2返回函数数组。在理解promissione.all()和async/await时,我觉得缺少了一些简单的东西。 代码块的差异如下: > 块1:创建许诺函数数组,然后使用map运算符将其包装在异步函数中。 块2:许诺函数的数组被创建为异步函数。因此,不调用map运算符。 如果
问题内容: 我才刚刚开始研究SQL。 我有一个SQL Server 2008r2数据库,它将返回两个字段DocDate和InvValue。我需要将InvValues汇总为今天的MTD和YTD,所以看起来像 我已经做了大量的Google搜寻,并且可以使用SUM&DATEPART进行一项或多项,但是我坚持尝试两者兼而有之。 有人可以给我一些伪代码,以帮助我进一步谷歌。 谢谢@戈登·利诺夫(Gordon
这个示例代码来自一本Java书籍,从墙上的99瓶啤酒到没有啤酒打印出这首歌。问题是,当墙上是1瓶啤酒时,它仍然写着瓶子。我试图通过在末尾添加部分来解决这个问题。但是,它仍然显示1瓶啤酒在墙上,我瓶啤酒在墙上。 我不知道该改变什么来解决这个问题。是否创建另一个while部分? 如果你能给他们一个提示,这样我就可以自己解决它,那也很酷!因为我知道我的实际歌曲输出是在第一个if部分,但我不知道我应该在哪