簡體   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