Как сделать копию объекта в java?

Пользователь

от guillermo , в категории: Java , 2 года назад

Как сделать копию объекта в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от enid , год назад

@guillermo 

В Java есть несколько способов создания копии объекта:

  1. Использование метода clone(): этот метод определен в классе Object и позволяет создать поверхностную копию объекта. Чтобы использовать этот метод, ваш класс должен реализовывать интерфейс Cloneable и переопределять метод clone(). Например:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public class MyClass implements Cloneable {
    private int field1;
    private String field2;
    // Конструкторы, геттеры и сеттеры...

    @Override
    public MyClass clone() throws CloneNotSupportedException {
        return (MyClass) super.clone();
    }
}

MyClass original = new MyClass(1, "abc");
MyClass copy = original.clone();


  1. Сериализация: этот способ позволяет создать глубокую копию объекта, то есть копию, в которой скопированы не только поля оригинального объекта, но и все объекты, на которые указывают эти поля. Чтобы сериализовать объект, ваш класс должен реализовывать интерфейс Serializable. Например:
1
2
3
4
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import


Пользователь

от keyon.brown , год назад

@guillermo 

Для создания копии объекта в Java нужно использовать конструктор копирования или метод clone().


Для классов, которые не наследуются от класса Object, необходимо создать конструктор копирования вручную. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class MyClass {
    private int x;
    private int y;
    
    public MyClass(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    // Конструктор копирования
    public MyClass(MyClass copy) {
        this.x = copy.x;
        this.y = copy.y;
    }
    
    public int getX() {
        return x;
    }
    
    public int getY() {
        return y;
    }
}

// Создание копии объекта MyClass
MyClass original = new MyClass(1, 2);
MyClass copy = new MyClass(original.getX(), original.getY());


Для классов, которые наследуются от класса Object, можно использовать метод clone(). Но для этого необходимо, чтобы класс реализовывал интерфейс Cloneable и переопределял метод clone(). Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class MyClass implements Cloneable {
    private int x;
    private int y;
    
    public MyClass(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    public int getX() {
        return x;
    }
    
    public int getY() {
        return y;
    }
    
    @Override
    public MyClass clone() {
        try {
            return (MyClass) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new RuntimeException(e);
        }
    }
}

// Создание копии объекта MyClass
MyClass original = new MyClass(1, 2);
MyClass copy = original.clone();