Let’s clone in Java

Java Cloning

Java Cloning

Sarrera

java Cloneable interfazea markatzailea interfazea da. It does have any method. But if we write a class as below, it gives a message to the jvm that the class can be cloned. Ondorengo kodea objektu sinple klonazioa prozesua azaltzen da –







[kodea]

package com.home.cloning;

publikoak klase CloneClass lanabesen Cloneable {

int bat;

bikoitza b;

// Metodo honek Object en klon deiak().

CloneClass getClone() {

saiatu {

// Objektu ere dei clone.

return (CloneClass) super.clone();

} harrapatzeko (CloneNotSupportedException e) {

Sistema.errondan.println (” Klonazioa ez da onartzen. ” );

return hau;

}

}

}

[/kodea]

Let azpitik bigarren adibidea egiaztatu gurekin.

[kodea]

package com.home.cloning;

publikoak klase Test Clone Jabetza {

publikoak gal testIface() {

CloneClass x1 = berriak CloneClass();

CloneClass x2;

x1.a = 15;

x1.b = 35.05;

x2 = x1.getClone(); // clone x1

Sistema.errondan.println(” x1: ” + x1.a + ” ” + x1.b);

Sistema.errondan.println(” x2: ” + x2.a + ” ” + x2.b);

}

publikoak estatiko gal nagusia(String args[]) {

Test Clone Object clone proba objektu = berriak Test Clone Jabetza();

// proba babestuta bidez

testCloneObject.testIface();

}

}

Goiko adibidean, metodoa [kodea] getClone [/kodea] deitzen dio [kodea] clone [/kodea] objektuaren metodo eta objektu itzultzen du. It must be noticed here that the object with is returned after the cloning mechanism has to be type casted into its appropriate type, in this case it is

[kodea] CloneClass [/kodea]

If the class is not implementing the cloneable interface, and we try to clone that object we get a

[kodea] CloneNotSupportedException [/kodea]

In the process of cloning, the constructor is not called rather an exact copy of the said object is created. But the object of which the clone is created, must implement the cloneable interface.

The klase Object’s clone() method creates and returns a copy of the object, with the same class and with all the fields having the same values. However, [kodea] Object.clone() [/kodea] throws a [kodea] CloneNotSupportedException [/kodea] unless the object is an instance of a class that implements the marker interface Cloneable.

The default implementation of [kodea] Object.clone()[/kodea] performs a azaleko kopia. If a class requires a sakona kopia or some other custom behavior, izan bere pertsonalizatu behar da [kodea] clone()[/kodea] Metodo superclass kopia lortzea dute ondoren.







Klonazioa abantailak

Klonazioa mekanismo sustatzailearen zeregin estra aurrezten kasuan objektu baten kopia bat sortu behar dugu. Ez dugu behar deitzeko [kodea] berriak [/kodea] objektuaren operadorea. Horrela, klonazio estra prozesatzeko sustatzailearen zeregin asko aurrezten. Objektu baten klona objektuaren kopia zehatza da.

Klonazioa desabantailak

Klonazioa desabantaila bat da itzulera-mota [kodea] clone [/kodea] metodoa da bat [kodea] Objektu [/kodea]. Hori dela eta mota casting sortu objektu beharrezkoa da.

Beste desabantaila bat da ez dela posible sartzeko [kodea] clone [/kodea] Metodo abstraktu mota batetan. interfazeen gehienek eta Java klase abstraktuak ez dute zehaztu publikoa [kodea] clone [/kodea] metodoa. Hori dela eta, the [kodea] clone [/kodea] Metodo bakarrik erabiltzen da objektu baten class ezaguna bada, bertan abstrakzioa generikoenetako mota posible erabiliz printzipioa kontra dago. For example, Bat-zerrenda erreferentziatzat Java badu, inork ezin aldarrika [kodea] clone [/kodea] erreferentzia hori metodo zerrenda zehazten ez clone publikoa delako() metodoa. Benetako ArrayList eta LinkedList bezalako zerrenda inplementazioak guztiak, oro har, clone() metodo beraiek, baina deserosoa eta abstrakzioa txarra da benetako klasea objektu baten mota egiteko inguruan.

Klonazioa ekintza potentzialki arriskutsua da, Honela zenbait ezusteko ondorioak izan ditzake. adibidez, ari klonatu objektuaren erreferentzia aldagai bat izanez gero esan refObject, gero klonatu objektu batean, refObject objektu beraren jatorrizko objektu aipatutako erreferentzia izango dute. clone refObject du edukietan aldaketa bat egiten badu, orduan aldaketa jatorrizko objektu islatuko da baita. Demagun honako adibidea – Objektu baten I / O korronte bat irekitzen bada eta gero klonatu da, ondoren, bi objektuen bi erreka gainean lan egiteko gai izango da. Further, objektu horietako bat korronte ixten bada, gero erreka da biak itxita eta bigarren objektua saiatzen bada han idazteko, Hau akats bat eragiten.

Geroztik klonazioa arazo batzuk sor ditzake, the [kodea] clone [/kodea] metodoa. So the [kodea] clone [/kodea] Metodo class bat den betearazte barruan jaso behar da deitu [kodea] cloneable [/kodea] interface non metodoa deituz [kodea] clone [/kodea] metodoa da egin babestuta, edo berau esplizituki gainidatzi beharko klasean zein da publikoaren arabera. Adibide gisa, goian ikusi dugun klonazioa eginez [kodea] clone [/kodea] protected. Ondorengo adibidez klonazioa metodologia ilustratzen gainidazteko bidez –

[kodea]

package com.home.cloning;

publikoak klase CloneViaOverRiding lanabesen Cloneable {

int bat;

bikoitza b;

// clone() orain askatu eta publikoa da.

publikoak Objektu clone() {

saiatu {

// Objektu ere dei clone.

return super.clone();

} harrapatzeko (CloneNotSupportedException e) {

Sistema.errondan.println(“Klonazioa ez da onartzen.”);

return hau;

}

}

}

[/kodea]

Orain hurrengo egiaztatu adibidez beherago.

[kodea]

package com.home.cloning;

publikoak klase Test Clone Jabetza {

publikoak gal testPublic() {

x1 = CloneViaOverRiding berriak CloneViaOverRiding();

CloneViaOverRiding x2;

x1.a = 10;

x1.b = 20.98;

// here, clone() zuzenean deritzo.

x2 = (CloneViaOverRiding) x1. clone ();

Sistema.errondan.println(“x1: ” + x1.a + ” ” + x1.b);

Sistema.errondan.println(“x2: ” + x2.a + ” ” + x2.b);

}

publikoak estatiko gal nagusia(String args[]) {

Test Clone Object clone proba objektu = berriak Test Clone Jabetza();

// proba bidez publikoak

testCloneObject.testPublic();

}

}

[/kodea]

Adibide honetan metodoa, metodoa [kodea] clone [/kodea] objektu klasearen aldatu dela, zergatik da publiko deklaratu Adibide kontrastea da, non [kodea] getClone [/kodea] ez du sarbide-modifikatzaile edozein eskuragarria bakarrik pakete mailan egiten dute.

bi ikuspegi horien biotan, du cloneable interfazea gauzatzeko derrigorrezkoa da.

klonazioa eragindako bigarren mailako efektuak batzuetan zaila hasierako maila identifikatu dira. Erraza da klase bat dagoela klonazioa segurua dela uste denean, benetan, ez da. Orokorrean, Ez da gomendatzen klase edozein Cloneable interfazea ezartzeko komertzial sendoa lurrean bat izan gabe .







klonazioa Alternative

Klonazioa mekanismo aukera gutxi ditu –

  • kopia eraikitzaile – kopia eraikitzaile bat eraikitzaile batek parametro gisa klase bereko beste instantzia bat onartzen da.
  • fabrika metodoa – Metodo horiek ez dira beti egokiak denean hormigoizko klonatu objektu-mota ez da aldez aurretik ezagutzen.
  • serializaziorako eta deserialization erabilera klonazioaren bidez alternatiba bat da.

Ondorioa

  • Objektu klonazioa existitzen den objektu baten kopia bat sortzeko mekanismoa da
  • Klonazioa azaleko kopia mekanismoa honakoa
  • Amaierako aurrezten sustatzailearen zeregin estra batzuk
  • klonazioa egiten behin sortu klona objektu beharrezkoa da esplizituki casted in the required motaren
  • Klonazioa bigarren mailako efektuak batzuk ditu adib den klonatu objektu bat beste objektuaren erreferentzia badu, eta klonatu objektu berri izatean aipatutako objektua aldatzen, then the original object also gets changed.
  • Cloning mechanism has some alternatives – the copy constructor, fabrika metodoa, serialization and de-serialization.
Tagged on: ,
============================================= ============================================== Buy best TechAlpine Books on Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share