我可能有一个愚蠢的问题,但我仍然想问这个问题。
我所拥有的:
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生成的(用过的大摇大摆(也许不喊))