Java: когда добавлять дополнительный код к методу Clone?

Я видел следующие две реализации интерфейса 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;  
   }   
}

Оба используют либо строковые, либо примитивные типы.

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

Эти две реализации идентичны?

Кто предпочитает в основном стиль кодирования?

Есть ли преимущества или недостатки одного перед другим?

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

Unhandled Exception 03.10.2018 21:33

Тем не менее, он отвечает на вопрос в заголовке. "Когда добавить дополнительный код к методу клонирования?" Никогда, не реализуйте Cloneable. Это плохая практика. stackoverflow.com/questions/3627053/…

Bakon Jarser 03.10.2018 21:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
31
0

Другие вопросы по теме