logo

Clonació d'objectes en Java

constructor en javaEl clonació d'objectes és una manera de crear una còpia exacta d'un objecte. El mètode clone() de la classe Object s'utilitza per clonar un objecte.

El java.lang.Interfície clonable ha de ser implementat per la classe el clon d'objecte de la qual volem crear. Si no implementem la interfície Cloneable, es genera el mètode clone(). CloneNotSupportedException .

El mètode clone(). es defineix a la classe Object. La sintaxi del mètode clone() és la següent:

 protected Object clone() throws CloneNotSupportedException 

Per què utilitzar el mètode clone()?

El mètode clone(). desa la tasca de processament addicional per crear la còpia exacta d'un objecte. Si ho fem utilitzant la paraula clau nova, es necessitarà molt de temps de processament, per això fem servir la clonació d'objectes.

Avantatge de la clonació d'objectes

Tot i que Object.clone() té alguns problemes de disseny, però encara és una manera popular i fàcil de copiar objectes. A continuació es mostra una llista dels avantatges d'utilitzar el mètode clone():

  • No cal escriure codis llargs i repetitius. Només cal que utilitzeu una classe abstracta amb un mètode clone() de 4 o 5 línies.
  • És la manera més fàcil i eficient de copiar objectes, sobretot si l'apliquem a un projecte ja desenvolupat o antic. Només cal definir una classe pare, implementar-hi Cloneable, proporcionar la definició del mètode clone() i la tasca es farà.
  • Clone() és la manera més ràpida de copiar la matriu.

Desavantatge de la clonació d'objectes

A continuació es mostra una llista d'alguns desavantatges del mètode clone():

  • Per utilitzar el mètode Object.clone() hem de canviar moltes sintaxis al nostre codi, com ara implementar una interfície Cloneable, definir el mètode clone() i gestionar CloneNotSupportedException, i finalment, cridar Object.clone() etc.
  • Hem d'implementar una interfície clonable mentre no té cap mètode. Només hem d'utilitzar-lo per dir-li a la JVM que podem realitzar clone() al nostre objecte.
  • Object.clone() està protegit, de manera que hem de proporcionar el nostre propi clone() i trucar indirectament a Object.clone() des d'ell.
  • Object.clone() no invoca cap constructor, de manera que no tenim cap control sobre la construcció d'objectes.
  • Si voleu escriure un mètode de clonació en una classe secundària, totes les seves superclasses haurien de definir-hi el mètode clone() o heretar-lo d'una altra classe pare. En cas contrari, la cadena super.clone() fallarà.
  • Object.clone() només admet la còpia superficial, però haurem de substituir-la si necessitem una clonació profunda.

Exemple del mètode clone() (clonació d'objectes)

Vegem un exemple senzill de clonació d'objectes

 class Student18 implements Cloneable{ int rollno; String name; Student18(int rollno,String name){ this.rollno=rollno; this.name=name; } public Object clone()throws CloneNotSupportedException{ return super.clone(); } public static void main(String args[]){ try{ Student18 s1=new Student18(101,'amit'); Student18 s2=(Student18)s1.clone(); System.out.println(s1.rollno+' '+s1.name); System.out.println(s2.rollno+' '+s2.name); }catch(CloneNotSupportedException c){} } } 
Prova-ho ara
 Output:101 amit 101 amit 
descarregar l'exemple de clonació d'objectes

Com podeu veure a l'exemple anterior, ambdues variables de referència tenen el mateix valor. Així, clone() copia els valors d'un objecte a un altre. Per tant, no necessitem escriure codi explícit per copiar el valor d'un objecte a un altre.

Si creem un altre objecte amb una paraula clau nova i li assignem els valors d'un altre objecte a aquest, requerirà molt de processament en aquest objecte. Per tant, per desar la tasca de processament addicional, utilitzem el mètode clone().