Копирование класса с его данными полей

127
11 февраля 2021, 15:00

У меня есть класс POJO, соответственно в нем присутствуют поля с геттерами. Мне необходимо создать дубликат класса, но не экземпляр, через ключевое слово new, а именно копию, что бы все данные из переменных и коллекций остались при себе. Подтолкните пожалуйста на реализацию.

Answer 1

Для начала имплементируем Cloneable интерфейс. Далее переопределяем метод clone()

class PojoClassOne implements Cloneable{
    private String field;
    public PojoClassOne(String field) {
        this.field = field;
    }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
class PojoClassTwo implements Cloneable {
    private PojoClassOne pojoClassOne;
    private List<PojoClassOne> listFields;
    public List<PojoClassOne> getListFields() {
        return listFields;
    }
    public void setListFields(List<PojoClassOne> listFields) {
        this.listFields = listFields;
    }

  @Override
  protected PojoClassTwo clone() throws CloneNotSupportedException {
    PojoClassTwo pojoClassTwo =  (PojoClassTwo) super.clone();
    List<PojoClassOne> pojoClassOnes = new ArrayList<>();
    for (PojoClassOne field : listFields){
        pojoClassOnes.add((PojoClassOne) field.clone());
    }
    pojoClassTwo.setListFields(pojoClassOnes);
    pojoClassTwo.setPojoClassOne((PojoClassOne) 
    this.getPojoClassOne().clone());
    return pojoClassTwo;
}
    public PojoClassOne getPojoClassOne() {
        return pojoClassOne;
    }
    public void setPojoClassOne(PojoClassOne pojoClassOne) {
        this.pojoClassOne = pojoClassOne;
    }
}
public class Main {
    public static void main(String[] args) throws CloneNotSupportedException {
        PojoClassTwo pojoClass = new PojoClassTwo();
        pojoClass.setPojoClassOne(new PojoClassOne("field"));
        List<PojoClassOne> fields = Arrays.asList(new PojoClassOne("field1"), new PojoClassOne("field2"), new PojoClassOne("field3"));
        pojoClass.setListFields(fields);
        PojoClassTwo pojoClassClon = (PojoClassTwo) pojoClass.clone();
    }
}
READ ALSO
Jakson JSON как использовать дженерики?

Jakson JSON как использовать дженерики?

Хочу сделать так, чтоб этот метод «convertResponceInObjects» работал с разными объектами, но не получается

114
Проверка на наличие сразу двух классов

Проверка на наличие сразу двух классов

Необходимо, чтобы с помощью jQuery появлялся блок имеющий два определенных классаНапример, если я делаю фильтр в интернет магазине и мне нужно...

108
ассинхронная загрузка

ассинхронная загрузка

у меня есть страница последовательной загрузки скриптов за генерацию нужной страницы отвечают несколько скриптов сейчас есть проблема...

93
Как перебрать api в компоненте React&#39;a?

Как перебрать api в компоненте React'a?

Мне нужно пройтись циклом по компоненту Authors и возвратить

135