2013-05-09 3 views
0

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

+0

Клонирование или копирование в целом? (Последний почти всегда является предпочтительным.) –

+0

. мы хотим изменить оператор объекта в методе, но после выполнения этого метода мы хотим, чтобы объект возвращался в исходное состояние. – bsiamionau

+0

Я не могу. Я программировал на Java с мая 1997 года, и я никогда не нашел для него никакого использования или «конструкторов копирования». – EJP

ответ

0

Если у вас есть объект y инкапсулирован (например, он является private) внутри объекта X, но вы предоставляете метод доступа (например, getY()), тогда вы рискуете вернуть ссылку на свой частный объект, и это плохо. Вы не хотите, чтобы код клиента мог получить ссылку на него. Поэтому вместо этого вы можете копировать или клонировать объект в getY(). Как уже упоминалось, хотя копирование, вероятно, предпочтительным по сравнению с клоном - см Эффективное Java пункт 11.

Вот пример кода:

public class X { 
    private Date y = new Date(); 

    // other code here 

    public Date getY() { 
     //this could be bad: 
     //return y; 
     //this is good: 
     return new Date(y); 
    } 
+0

Упс забыл упомянуть еще одну ссылку: Эффективный Java-элемент 24 содержит информацию об защитном копировании. –

+0

Очень логичный ответ, спасибо! Я буду копать больше на Оборонительном Копировании – Fardu

0

Иногда вы загружаете свойства объекта в форму, а затем привязываете каждое свойство к (текстовое поле, combobox, ...) после внесения изменений в (текстовое поле, флажок, ...), даже если вы отменяете, вы можете «т получить исходные значения, так клонирование является лучшим вариантом,

клона вашего объекта затем связать, если вы хотите, чтобы отменить исходный объект всегда неизменный, это только один случай