2015-07-08 2 views
1

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

public class Vegetable{ 
    private int ... 
    //a lot of fields 
    public Vegetable(Vegetable v) { 
     //some magic here 
    } 
} 

Ищу вариант, где я бы не копировать каждое отдельное поле вручную в конструкторе, а использовать что-то вроде супер (v).

+0

Я думаю, что это приведет к бесконечной рекурсии ... –

+0

Вы хотите, чтобы вы клонировали существующий объект ? – beresfordt

+0

Можете ли вы объяснить, _why_ вы хотите это сделать? Какова цель более высокого уровня? –

ответ

3

Java не предоставляет конструктор копии по умолчанию.

Однако Java предоставляет метод Object.clone(). Вы можете вызвать его на экземплярах классов, реализующих Cloneable. В противном случае он выкинет CloneNotSupportedException.

Реализация по умолчанию создает мелкой копии. Если ваш объект содержит ссылки на другие объекты, копируются только ссылки. Обычно это не то, что вы хотите. Чтобы создать более глубокую, более независимую копию, вы можете расширить реализацию по умолчанию.

Вы можете создать свой собственный конструктор копирования, и это иногда полезно. Однако, в отличие от clone(), конструктор копирования не обязательно создает другой экземпляр того же класса. Конструктор копирования для класса T всегда будет создавать T, даже если ему передан экземпляр подкласса T.

Смежные вопросы