Да, он ничего не делает, кроме возвращения той же ссылки, которая была передана.
Возможно, вы ищете метод Object#clone()
*:
public Validation copy(Validation newValidation) {
return newValidation.clone();
}
В 95% случаев, что является наиболее подходящим и правильным решением для различных типов задач. Вы не должны изобретать велосипед, если это не нужно.
В документации Java говорит:
... этот метод выполняет "неполную копию" этого объекта, а не "глубокая копия" операции.
... может потребоваться изменить одно или несколько полей объекта, возвращенного super.clone
, перед его возвратом.
Validation y = x.copy(x);
Вы не должны пройти x
к copy
метод, потому что, когда вы вызываете этот метод на x
, например, в классе у вас есть доступ к this
, который в данном случае представляет ваш x
,
Validation y = x.clone();
Для "мелкой копией" предыдущий пример хорош, но для "глубокой копии" вам необходимо изменить поведение по умолчанию Object#clone()
:
class A implements Cloneable {
public @Override A clone() throws CloneNotSupportedException {
return (A)super.clone(); // or or another implementation
}
}
class Validation implements Cloneable {
// an example of a reference-type field
private A a; // with a setter
public @Override Validation clone() throws CloneNotSupportedException {
Validation newClone = new Validation();
// note that the `A` class has to implement the `Cloneable`
// and override the `clone` method making it `public`
newClone.setA(this.a.clone());
return newClone;
}
}
* Не забудьте реализовать интерфейс Cloneable
, чтобы разрешить клонирование.
Для чтения: Effective Java, Item 11: Override clone judiciously.
Нужна ли вам глубокая копия или нет, все зависит от кода внутри класса Vlidation, можете ли вы предоставить код подтверждения? – developer
Пример в ссылке создает копию текущего объекта ('this'). – infiniteRefactor
Возможный дубликат [Clone() vs Copy constructor - который рекомендуется в java] (http://stackoverflow.com/q/2427883/5221149). – Andreas