Я видел следующие две реализации интерфейса Cloneable.
Пример 1: просто верните super.clone ();
class Employee1 implements Cloneable
{
private String name;
private int age;
private String address;
public Employee1(String name, int age, String address)
{
this.name = name; this.age = age; this.address = address;
}
public String getName() { return name; }
public int getAge() { return age; }
public String getAddress() { return address; }
public Object clone()throws CloneNotSupportedException
{
return (Employee1)super.clone();
}
}
Пример 2: явное присвоение каждой переменной
class Employee2 implements Cloneable
{
private String name;
private int age;
private String address;
public Employee2(String name, int age, String address)
{
this.name = name; this.age = age; this.address = address;
}
public String getName() { return name; }
public int getAge() { return age; }
public String getAddress() { return address; }
public Object clone()throws CloneNotSupportedException
{
Employee2 emp2 = (Employee2)super.clone();
emp2.name = name;
emp2.age = age;
emp2.address = address;
return emp2;
}
}
Оба используют либо строковые, либо примитивные типы.
Я могу видеть, нужно ли рассчитывать определенные поля или, возможно, исключать их, но объекты, которые я видел, будут явно копировать каждый отдельный атрибут.
Эти две реализации идентичны?
Кто предпочитает в основном стиль кодирования?
Есть ли преимущества или недостатки одного перед другим?
Тем не менее, он отвечает на вопрос в заголовке. "Когда добавить дополнительный код к методу клонирования?" Никогда, не реализуйте Cloneable. Это плохая практика. stackoverflow.com/questions/3627053/…




В «дублирующей» статье обсуждается метод клонирования, но, похоже, не обсуждается основная цель, а именно две разные реализации.