Java: olion kopioiminen

Olion kopioiminen toiselle oliolle datasisältöineen onnistuu Javalla toteuttamalla kopioitavan olion luokassa Cloneable rajapinta sekä luomalla metodi clone() metodi.

Metodi clone() voisi näyttää seuraavanlaiselta:

// Toteutetaan clone() metodi Cloneable rajapinnasta
// luokassa LuokkaA
 protected Object clone() throws CloneNotSupportedException {
  LuokkaA palautus = (LuokkaA) super.clone();
  return palautus;
}


Tämän jälkeen luokasta LuokkaA voidaan lähteä luomaan kopiota:

LuokkaA ekaOlio = new LuokkaA();
LuokkaA tokaOlio = new LuokkaA();
		
/* Käytetään ekaOliota */
ekaOlio.setLuvut(1, 2);
System.out.println("ekaOlio ihan alussa: " + ekaOlio);
		
/* Kopioidaan olio ekaLuokka */
 try {
  tokaOlio = (LuokkaA) ekaOlio.clone();
 } catch (CloneNotSupportedException p) {
  p.printStackTrace();
 }
/* tokaOlion sisältö on identtinen, koska se on kopio */
System.out.println("tokaOlio kopionnin jälkeen: " + tokaOlio);

tokaOlio.setLuvut(2, 1);
System.out.println("tokaOlio vähän myöhemmin: " + tokaOlio);

Ylläolevan ohjelman tulostus näyttäisi seuraavalta

ekaOlio ihan alussa: (1, 2)
tokaOlio kopionnin jälkeen: (1, 2)
tokaOlio vähän myöhemmin: (2, 1)

Virhetilanteessa Java ilmoittaa CloneNotSupportedException poikkeuksesta jonka käsittelyn Cloneable rajapinta vaatii.

Pieni clone() koodini Eclipse projektina oheisessa linkissä. CloneEsimerkki.zip.

Advertisements

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s