Hvordan kopierer jeg et objekt i Java?
Overvej koden nedenfor:
DummyBean dum = new DummyBean(); dum.setDummy("foo"); System.out.println(dum.getDummy()); // prints 'foo' DummyBean dumtwo = dum; System.out.println(dumtwo.getDummy()); // prints 'foo' dum.setDummy("bar"); System.out.println(dumtwo.getDummy()); // prints 'bar' but it should print 'foo'
Så jeg vil kopiere dum
til dumtwo
og ændre dum
uden at påvirke dumtwo
. Men koden ovenfor gør det ikke. Når jeg ændrer noget i dum
, den samme ændring sker i dumtwo
også.
Jeg tror, når jeg siger dumtwo = dum
, Java kopierer kun referencen . Så er der nogen måde at oprette en ny kopi af dum
og tildel den til dumtwo
?
Svar
Opret en kopikonstruktør:
class DummyBean { private String dummy; public DummyBean(DummyBean another) { this.dummy = another.dummy; // you can access } }
Hvert objekt har også en klonmetode, som kan bruges til at kopiere objektet, men brug det ikke. Det er alt for nemt at oprette en klasse og lave en forkert klonemetode. Hvis du vil gøre det, så læs i det mindste, hvad Joshua Bloch har at sige om det i Effektiv Java .