Java - прототип, делая глубокую копию - PullRequest
2 голосов
/ 13 апреля 2019

Я хотел спросить, потому что я довольно новичок в этом, это правильный способ сделать глубокую копию Объекта Документа, я не знаю, правильно ли я реализовал копирование полей.

package model;

public class Document implements Cloneable {
    //fields
    private String author;
    private String date;
    private double versionID;
    private String contents;


    public Document(String author,String date,double versionID,String contents) {
         this.author=author;
         this.date=date;
         this.versionID=versionID;
         this.contents=contents;        
    }

    //getters-setters

    }
    //making the deep-copy clone all obj ref to Document
    @Override
    public Object clone() throws CloneNotSupportedException {
        Document doc =(Document)super.clone();
        doc.author=this.author;
        doc.date=this.date;
        doc.versionID=this.versionID;
        doc.contents=this.contents;

        return doc;
    }   

}

1 Ответ

0 голосов
/ 13 апреля 2019

Ваш объект имеет только примитивные типы и неизменяемые строки, поэтому достаточно Document doc =(Document)super.clone();, и вам не нужно выполнять отдельные назначения.Но это немного рискованно, так как если вы когда-либо добавите изменяемый объект к полям, не делать отдельную копию этого объекта вызовет проблемы.Также уже ведутся расширенные обсуждения использования некоторых существующих библиотек для создания глубоких копий, например, как здесь: Как сделать глубокую копию объекта в Java?

...