Metoda Java Object clone () stvara plitku kopiju objekta.
Ovdje plitka kopija znači da stvara novi objekt i kopira sva polja i metode povezane s objektom.
Sintaksa clone()
metode je:
object.clone()
clone () Parametri
clone()
Metoda ne poduzimati nikakve parametre.
clone () Povratne vrijednosti
- vraća kopiju predmeta
- baca
CloneNotSupportedException
ako klasa objekta ne implementiraCloneable
sučelje
Napomena : Object
Klasa se ne provodi Cloneable
. Stoga ne možemo pozvati clone()
metodu za objekt Object
klase.
Primjer 1: Java klon ()
class Main implements Cloneable ( // declare variables String name; int version; public static void main(String() args) ( // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try ( // create clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 ) catch (Exception e) ( System.out.println(e); ) ) )
U gornjem primjeru stvorili smo klasu pod nazivom Main. Klasa uključuje dva polja naziv i verziju. Ovdje smo inicijalizirali polja klase pomoću objekta obj1 klase.
Primijetite crtu,
Main obj2 = (Main)obj1.clone();
Ovdje smo koristili clone()
metodu za stvaranje kopije obj1. Vrijednost koju clone()
je vratio dodjeljuje se objektu obj2. Budući da je povratak vrijednost clone()
je Object
tipa, koristili smo (Main)
ga pretvoriti u glavnom tipa.
Sada se imenu i verziji polja može pristupiti pomoću objekta obj2. Međutim, ako promijenimo vrijednost polja pomoću obj2, vrijednost povezana s obj1 neće se promijeniti.
Primjer 2: Promjena vrijednosti pomoću kloniranog objekta
class Main implements Cloneable ( // declare variables String name; int version; public static void main(String() args) ( // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try ( // create a clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 // changing value of name // using obj2 obj2.name = "Python"; System.out.println(obj2.name); // Python // check if value associated // with obj1 is changed System.out.println(obj1.name); // Java ) catch (Exception e) ( System.out.println(e); ) ) )
Primijetite crtu,
obj2.name = "Python";
Ovdje smo promijenili vrijednost varijable pomoću obj2. Sada kada ispisujemo ime varijable i za obj1 i za obj2, možemo vidjeti da se vrijednost za obj1 nije promijenila. To je zato što clone()
metoda pravi plitku kopiju predmeta.
Da biste saznali više o plitkom kopiranju, posjetite Što je plitko kopiranje u Javi?
clone()
Metodu smo zatvorili u blok Java try … catch. To je zato što podrazred može izbaciti iznimku ako se objekt ne može klonirati.
Napomena : Object
Razred je superrazred za sve razrede u Javi. Dakle, svaka klasa i nizovi mogu implementirati clone()
metodu.