У меня может быть глупый вопрос, но я все еще хочу его задать.
Что у меня есть:
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 и использую сопоставление объектов Джексона, только что перечитал values.yml в сгенерированный объект Car, что дает мне экземпляр этого сгенерированного объекта со всеми сопоставленными значениями.
4. На этом этапе у меня есть объект в некотором локальном кэше, и у меня есть список таких объектов, пример:
Map<String, Car> carReferenceCache; // Represents map of values.yml ID to mapped object
Теперь я хочу просмотреть каждое значение Car и объединить объекты Car, включая все, что есть внутри (список, карты и т. Д.), И объединить Car. Когда я написал некоторую логику слияния, я понял, что на самом деле значение одного из «carReferenceCache» изменяется, это означает, что если кто-то получит автомобиль по идентификатору, он вернет измененный объект (объединенный), что в моем случае не годится. Я хочу сохранить в этом кеше изначально загруженные объекты с оригинальными данными.
Итак, мой вопрос:
Как я могу сделать глубокое клонирование каждого объекта Car, когда кто-то вызывает getCarByID и возвращает эту копию без изменения объекта в самом кэше ???
Есть несколько ограничений:
1. Эти объекты были сгенерированы из файла схемы yml (он не реализует сериализуемые и клонируемые интерфейсы)
2. Я не могу изменить конструктор, классы генерируются из yml (используется swagger (возможно, не кричите))