深层复制,无需克隆和序列化

时间:2019-03-15 07:47:07

标签: java algorithm jaxb swagger clone

我可能有一个愚蠢的问题,但我仍然想问这个问题。

我所拥有的:

1。。我有一些yml模式文件,它描述了对象的结构。基于此文件,我将生成一些对象(例如Car)。

Yml示例:

swagger: '2.0'
info:
  description: Reference type definitions
  version: '1.0'
  title: Reference type definitions
paths: {}
definitions:

  Car:
    type: object
    properties:
      id:
        type: string
      someField:
        type: string
      someArray:
        type: array
        items:
          $ref: '#/definitions/Items'

2。。我大张旗鼓地生成了简单的对象(可以是jaxb或其他对象)

生成的文件示例:

@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaClientCodegen", date = "2019-03-13T18:18:47.890+02:00")
public class Car {
  @SerializedName("id")
  private String id = null;

  @SerializedName("someField")
  private String someField= null;

  @SerializedName("someArray")
  private List<Items> someArray= null;

values.yml示例

someField: YellowCar
someArray:
-
  id: itemID1
  itemField: value
-
  id: itemID2
  itemField: value2

3。之后,我正在读取values.yml并使用Jackson对象映射器映射将reads.yml读取到生成的Car对象,这为我提供了此生成对象的实例,其中映射了所有值。

4。在此阶段,我在某些本地缓存中有一个对象,并且有此类对象的列表,例如:

Map<String, Car> carReferenceCache; // Represents map of values.yml ID to mapped object

现在,我想遍历每个Car值并合并Car对象,包括其内部的所有内容(列表,地图等)并合并Car。当我写一些合并逻辑时,我意识到“ carReferenceCache”之一的值实际上已更改,这意味着如果有人通过ID检索car,它将返回更改的对象(合并),这对我来说不是很好。我想在该缓存中存储原始数据和原始数据。

所以我的问题是: 当有人调用getCarByID并返回此副本而不更改缓存本身中的对象时,我该如何对每个Car对象进行深度克隆?

约束很少: 1.此对象是从yml模式文件生成的(它未实现可序列化和可克隆的接口) 2.我不能更改构造函数,类是从yml生成的(用过的大摇大摆(也许不喊))

0 个答案:

没有答案