/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Object.clone()
Fra : daxi jumbo


Dato : 19-05-02 01:36

How do I override method clone() (of class Object) in my user defined class
C?
Which statements are needed, and where do i put these?

class C extends Object implements Cloneable {
public C(C c) { ... } //copy constructor
protected Object clone() { //overriding method clone() in class
Object
//??
try {
//??
}
catch(CloneNotSupportedException ex) {
//??
}
}
}





 
 
Martin Moller Peders~ (19-05-2002)
Kommentar
Fra : Martin Moller Peders~


Dato : 19-05-02 09:21

In <zrCF8.2243$fG3.76470@news2.ulv.nextra.no> "daxi jumbo" <daxi@jumbo.no> writes:

>How do I override method clone() (of class Object) in my user defined class
>C?
>Which statements are needed, and where do i put these?

Hej, Alle her forstaar norsk, saa du behoever ikke at skrive paa engelsk

Det er nok at skrive
class C implements Cloneable

Der er _ikke_ brug for en copy constructor eller at overskrive clone-metoden.

Mvh
Martin



>class C extends Object implements Cloneable {
> public C(C c) { ... } //copy constructor
> protected Object clone() { //overriding method clone() in class
>Object
> //??
> try {
> //??
> }
> catch(CloneNotSupportedException ex) {
> //??
> }
> }
>}





Ulrik Magnusson (19-05-2002)
Kommentar
Fra : Ulrik Magnusson


Dato : 19-05-02 23:38

Martin Moller Pedersen wrote:

> In <zrCF8.2243$fG3.76470@news2.ulv.nextra.no> "daxi jumbo" <daxi@jumbo.no> writes:
>
> >How do I override method clone() (of class Object) in my user defined class
> >C?
> >Which statements are needed, and where do i put these?
>
> Hej, Alle her forstaar norsk, saa du behoever ikke at skrive paa engelsk
>
> Det er nok at skrive
> class C implements Cloneable
>
> Der er _ikke_ brug for en copy constructor eller at overskrive clone-metoden.

Hvorfor ikke?? Den autoriserede måde at understøtte kloning på
er vist nogenlunde følgende:

1) Kald clone() for forælderklassen, så Object.clone() laver en
bit for bit kopi af felter i objektet.
2) Hvis objektet indeholder referencer, vil disse nu pege på samme
objekter som originalen og skal sættes til at pege på kloner af
disse (kloner er separate kopier og deler ingenting).

// altså
class A implements Cloneable
{
private B b = new B();
private int x = 0;

public Object clone()
{
try
{
A a = (A)super.clone();//bit for bit kopi
a.b = (B)b.clone();//b feltet skal ikke pege på det samme
// som før, men på et klon af b
// x peger ingen steder, så bitkopien af denne er ok
return a;
}
catch( CloneNotSupportedException e )
{
// fejl...
}
}
}

Læg mærke til at B skal implementere Cloneable og
det skal alle Bs referencer også, osv. Ligeledes med
As forælderklasse - det kan blive en ganske
omfattende process at implementere clone() på en
enkelt klasse..

Ulrik Magnusson


Brian Matzon (20-05-2002)
Kommentar
Fra : Brian Matzon


Dato : 20-05-02 09:44

"Ulrik Magnusson" <ulrikm@yahoo.com> wrote in message
news:3CE8292E.1D3630E6@yahoo.com...
> > Det er nok at skrive
> > class C implements Cloneable
> >
> > Der er _ikke_ brug for en copy constructor eller at overskrive
clone-metoden.
>
> Hvorfor ikke?? Den autoriserede måde at understøtte kloning på
> er vist nogenlunde følgende:
>
> 1) Kald clone() for forælderklassen, så Object.clone() laver en
> bit for bit kopi af felter i objektet.

Nope - der er ikke nogen "officiel" måde. Det kommer helt an på
om man vil have en deep eller shallow clone.
Der vil være mange situationer hvor en shallow clone vil være at fortrække
(f.eks i en cache (1.1.x (før java.lang.ref.*)).

/Brian Matzon



Ulrik Magnusson (22-05-2002)
Kommentar
Fra : Ulrik Magnusson


Dato : 22-05-02 17:23

"Brian Matzon" <brian@matzon.dk> wrote in message
> "Ulrik Magnusson" <ulrikm@yahoo.com> wrote in message
> > > Det er nok at skrive
> > > class C implements Cloneable
> > > Der er _ikke_ brug for en copy constructor eller at overskrive
> clone-metoden.
> > Hvorfor ikke?? Den autoriserede måde at understøtte kloning på
> > er vist nogenlunde følgende:
> > 1) Kald clone() for forælderklassen, så Object.clone() laver en
> > bit for bit kopi af felter i objektet.
> Nope - der er ikke nogen "officiel" måde. Det kommer helt an på
> om man vil have en deep eller shallow clone.
> Der vil være mange situationer hvor en shallow clone vil være at fortrække
> (f.eks i en cache (1.1.x (før java.lang.ref.*)).

Det kan du da have ret i. Jeg tænker bare altid på
kloner som 100% selvstændige individer - det er
gerne (altid) den slags jeg selv har haft brug for.

Ulrik Magnusson

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste