Metoda clone () Java Object vytváří mělkou kopii objektu.
Tady mělká kopie znamená, že vytvoří nový objekt a zkopíruje všechna pole a metody spojené s objektem.
Syntaxe clone()
metody je:
object.clone()
parametry clone ()
clone()
Metoda nebere žádné parametry.
clone () Návratové hodnoty
- vrátí kopii objektu
- vyvolá,
CloneNotSupportedException
pokud třída objektu neimplementujeCloneable
rozhraní
Poznámka : Object
Třída neimplementuje Cloneable
. Proto nemůžeme volat clone()
metodu pro objekt Object
třídy.
Příklad 1: Java clone ()
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); ) ) )
Ve výše uvedeném příkladu jsme vytvořili třídu s názvem Main. Třída zahrnuje dvě pole název a verzi. Zde jsme inicializovali pole třídy pomocí objektu obj1 třídy.
Všimněte si řádku,
Main obj2 = (Main)obj1.clone();
Zde jsme použili clone()
metodu k vytvoření kopie obj1. Hodnota vrácená uživatelem clone()
je přiřazena k objektu obj2. Protože návratová hodnota typu clone()
je Object
, použili jsme ji (Main)
k převodu na hlavní typ.
Nyní lze k názvu pole a verzi přistupovat pomocí objektu obj2. Pokud však změníme hodnotu polí pomocí obj2, hodnota spojená s obj1 se nezmění.
Příklad 2: Změna hodnoty pomocí klonovaného objektu
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); ) ) )
Všimněte si řádku,
obj2.name = "Python";
Zde jsme změnili hodnotu proměnné pomocí obj2. Nyní, když vytiskneme název proměnné pro obj1 i obj2, vidíme, že hodnota pro obj1 se nezměnila. Je to proto, že clone()
metoda vytváří mělkou kopii objektů.
Další informace o mělké kopii najdete v části Co je mělká kopie v Javě?
clone()
Metodu jsme uzavřeli uvnitř bloku Java try… catch. Je to proto, že podtřída může vyvolat výjimku, pokud objekt nelze klonovat.
Poznámka : Object
Třída je nadtřídou pro všechny třídy v Javě. clone()
Metodu tedy může implementovat každá třída a pole .