Как мне скопировать объект в Java?

Взгляните сюда http://forums.asp.net/t/1410702.aspx/1

Используйте следующие данные регулярного выражения, это будет поддерживать прыжок год.

var reg = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g;

Пример

744
задан Mooncrater 23 December 2017 в 19:15
поделиться

9 ответов

Создание конструктора копирования:

class DummyBean {
  private String dummy;

  public DummyBean(DummyBean another) {
    this.dummy = another.dummy; // you can access  
  }
}

Каждый объект также имеет метод клонирования, который можно использовать для копирования объекта, но не использовать его. Слишком просто создать класс и использовать неправильный метод клонирования. Если вы собираетесь это сделать, прочтите хотя бы то, что Джошуа Блох говорит об этом в Эффективная Java .

597
ответ дан 22 November 2019 в 21:24
поделиться

Альтернатива egaga's метод конструктора копии. Вы, вероятно, уже имеете POJO, поэтому просто добавляете другой метод copy(), который возвращает копию инициализированного объекта.

class DummyBean {
    private String dummyStr;
    private int dummyInt;

    public DummyBean(String dummyStr, int dummyInt) {
        this.dummyStr = dummyStr;
        this.dummyInt = dummyInt;
    }

    public DummyBean copy() {
        return new DummyBean(dummyStr, dummyInt);
    }

    //... Getters & Setters
}

, Если Вы уже имеете DummyBean и хотите копию:

DummyBean bean1 = new DummyBean("peet", 2);
DummyBean bean2 = bean1.copy(); // <-- Create copy of bean1 

System.out.println("bean1: " + bean1.getDummyStr() + " " + bean1.getDummyInt());
System.out.println("bean2: " + bean2.getDummyStr() + " " + bean2.getDummyInt());

//Change bean1
bean1.setDummyStr("koos");
bean1.setDummyInt(88);

System.out.println("bean1: " + bean1.getDummyStr() + " " + bean1.getDummyInt());
System.out.println("bean2: " + bean2.getDummyStr() + " " + bean2.getDummyInt());

Вывод:

bean1: peet 2
bean2: peet 2

bean1: koos 88
bean2: peet 2

, Но обе работы хорошо, это в конечном счете ваше дело...

0
ответ дан 22 November 2019 в 21:24
поделиться

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

5
ответ дан 22 November 2019 в 21:24
поделиться

Да. Вам необходимо Глубокая копия вашего объекта.

12
ответ дан 22 November 2019 в 21:24
поделиться

Для этого вам нужно каким-то образом клонировать объект. Хотя в Java есть механизм клонирования, не используйте его, если в этом нет необходимости. Создайте метод копирования, который выполняет копирование за вас, а затем выполните:

dumtwo = dum.copy();

Здесь есть еще несколько советов по различным методам выполнения копирования.

6
ответ дан 22 November 2019 в 21:24
поделиться

Да, вы просто делаете ссылку на объект. Вы можете клонировать объект, если он реализует Cloneable .

Прочтите эту вики-статью о копировании объектов.

См. Здесь: Копирование объектов

22
ответ дан 22 November 2019 в 21:24
поделиться

Вот достойное объяснение clone () , если вам в конечном итоге понадобится это ...

Здесь: clone (метод Java)

10
ответ дан 22 November 2019 в 21:24
поделиться

Вы можете попробовать реализовать Cloneable и использовать метод clone () ; однако, если вы используете метод клонирования, вы должны - по стандарту - ВСЕГДА переопределять Object метод public Object clone () .

1
ответ дан 22 November 2019 в 21:24
поделиться

Просто выполните следующие действия:

public class Deletable implements Cloneable{

    private String str;
    public Deletable(){
    }
    public void setStr(String str){
        this.str = str;
    }
    public void display(){
        System.out.println("The String is "+str);
    }
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

и где бы вы ни захотели получить другой объект, просто выполните клонирование. например:

Deletable del = new Deletable();
Deletable delTemp = (Deletable ) del.clone(); // this line will return you an independent
                                 // object, the changes made to this object will
                                 // not be reflected to other object
101
ответ дан 22 November 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: