2013-12-25 9 views
0

Вопрос, который у меня есть, довольно нуб, так что, пожалуйста, извините меня за мое невежество, поскольку я ноб.Java Clonable или copy constructor, почему я должен использовать любой из них? Что делает одна из этих стратегий на самом деле?

Я столкнулся с кодом, который некоторые консультанты писали в компании, в которой я работаю. Когда я попытался вникать в код, я понятия не имел, почему класс реализует некоторый интерфейс, называемый clonable. Поэтому я попытался использовать этот клонируемый беспорядок, и все, что я вижу, это такие вещи, как «не использовать» или «вместо этого использовать конструктор копирования». Я не знаю, что это такое. Может ли кто-то продумать причины того, когда этот тип клонирования действительно необходим? Почему я должен клонировать объект?

Я говорил с бывшим консультантом, и он упомянул об этом, что позволило бы нам, по-видимому, цеплять методы. Как questionSet.dosomething().doAnotherThing().dowth();

public class QuestionSet implements Cloneable { 
    ... 

    /* (non-Javadoc) 
    * @see java.lang.Object#clone() 
    */ 
    @Override 
    public QuestionSet clone() { 
     return new QuestionSet(this); 
    } 

    ... 
} 
+2

Я думаю, вы неправильно поняли, что сказал экс-консультант, или именно по этой причине он является бывшим консультантом. –

+0

Я никогда не использовал ни один из них (кроме экспериментов), в 17 лет Java. – EJP

+0

Основная причина, по которой 'clone()' существует в 'Object' _at all_, относится к массивам: вы можете клонировать массив, чтобы сделать мелкую копию. (Точная взаимосвязь между массивами и нормальной иерархией классов является одной из вещей, которые были не такими гладкими, как должно было быть на Java ...) –

ответ

1

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

+0

Это похоже на то, что я думал. Не могли бы вы подробнее рассказать? –