Я знаю, что соглашение об имплантации Object#clone()
говорит, что вы должны позвонить super.clone()
, чтобы получить скопированный объект.На самом деле последствия Object.clone() не вызвали super.clone()?
Но мне просто интересно, каковы последствия, если я этого не сделаю. Итак, давайте предположим, этот пример:
class SomeClass implements Cloneable {
private Object someField;
public SomeClass(Object someField) {
this.someField = Object someField;
}
public Object clone() {
return new SomeClass(this.someField);
}
}
Я чувствую, что это не право (TM). Если мне нужен какой-либо конструктор копирования или метод копирования, я бы просто использовал это, а не Object#clone()
.
Однако, спотыкаясь об этом в некотором устаревшем коде, я просто задавался вопросом: это действительно опасно? Или просто creative, но на самом деле плохой стиль?
Вы просто мелко копируете объект, а не глубоко копируете его. избыток someField будет влиять на оба объекта. –
super.clone() также создает по умолчанию неглубокую копию, так что это не проблема –