Klon objektů Java ()

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á, CloneNotSupportedExceptionpokud třída objektu neimplementuje Cloneablerozhraní

Poznámka : ObjectTřída neimplementuje Cloneable. Proto nemůžeme volat clone()metodu pro objekt Objecttří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 : ObjectTřída je nadtřídou pro všechny třídy v Javě. clone()Metodu tedy může implementovat každá třída a pole .

Zajímavé články...