Avatar billede x-masman Nybegynder
06. maj 2002 - 19:38 Der er 12 kommentarer og
2 løsninger

Cloning af objekter

Kan det virkelig være rigtigt at man ikke kan bruge clone i en klasse der ikke er nedarvet.

Spm er kan man bruge clone i en super klasse.

Jeg ved godt at man bare kan lave en kopi selv, men jeg vil bruge clone!!!!!!!!!!
Avatar billede disky Nybegynder
06. maj 2002 - 19:41 #1
Du kan ganske enkelt ikke lave en klasse der ikke er nedarvet.

Alle klasser stammer fra Object.

I dine egne klasser skal du dog selv implementere clone() da kun du ved hvordan man laver en klon.
Avatar billede jakoba Nybegynder
06. maj 2002 - 19:42 #2
du kan sagten bruge
    super.clone()
og den kloner det hele. også det der er tilføjet fter sidste forælder.
Avatar billede carstenknudsen Nybegynder
06. maj 2002 - 19:45 #3
Nej det er ikke rigtigt, husk på at
alle klasser nedarver fra java.lang.Object
hvis ikke du specificerer en extends klasse
der skal nedarves fra. Du kan bare implementere
Cloneable (der er et marker interface, så
du skal ikke implementere nogen metoder).
Avatar billede jakoba Nybegynder
06. maj 2002 - 19:45 #4
Men IKKE komplexe ting som objekter og arrays du evt kar i klassen.
Avatar billede disky Nybegynder
06. maj 2002 - 19:46 #5
jakoba:
Du har delvis ret.

Problemmet er bare at hvis det objekt du vil kopiere indeholder andre objekter så bliver de ikke klonet, kun deres reference bliver kopieret.

Jævnfør:
The method clone for class Object performs a specific cloning operation. First, if the class of this object does not implement the interface Cloneable, then a CloneNotSupportedException is thrown. Note that all arrays are considered to implement the interface Cloneable. Otherwise, this method creates a new instance of the class of this object and initializes all its fields with exactly the contents of the corresponding fields of this object, as if by assignment; the contents of the fields are not themselves cloned. Thus, this method performs a "shallow copy" of this object, not a "deep copy" operation.
Avatar billede x-masman Nybegynder
06. maj 2002 - 19:57 #6
Jeg troede bare at en "clone" var en funktion, der kunne bruges. Hvis man skal overskrive den kan det være lige meget.
Jeg skal det bruge da jeg har et objekt som består af en arrayliste af objekter. Jeg har en accessor, men hvis jeg ikke sender en kopi kan den ændres, og det må den ikke. Nå, men tak for hjælpen.
Avatar billede disky Nybegynder
06. maj 2002 - 20:18 #7
så bliver du nød til at lave din egen clone() som løber din ArrayList igennem og kloner de objekter også.
Avatar billede carstenknudsen Nybegynder
06. maj 2002 - 20:20 #8
I så fald har du ikke brug for at
clone noget. Du kan i stedet sende
en immuterbar liste istedet:
ArrayList list = ...;
List l = Collections.unmodifiableList( list );
l kan så ikke ændres og du kan sende
den videre.
Avatar billede x-masman Nybegynder
06. maj 2002 - 20:30 #9
Vi har bare en konstruktør, der laver et nyt objekt og så sender vi det videre.
Avatar billede x-masman Nybegynder
06. maj 2002 - 20:34 #10
et identisk objekt
Avatar billede codemon Nybegynder
06. maj 2002 - 21:59 #11
disky, det er faktisk ikke helt rigtigt, at man ikke kan lave en klasse der ikke er nedarvet.

lav klasse:

package java.lang
public class Object
{
  ...
}
og placer den i mappe java\lang
Det må jo selvfølgelig frarådes på det groveste.
Avatar billede disky Nybegynder
06. maj 2002 - 22:03 #12
læs java specifikationen, den siger alle klasser man ikke explicit siger arver fra noget arver fra java.lang.Object

Hvis du slipper igennem med dit foreslag, holder alt java op med at virke
Avatar billede codemon Nybegynder
06. maj 2002 - 22:48 #13
Hvis du kører javadoc på den hjemmelavede Object klasse, viser den at der ikke arves fra nogen.
http://localhost:8080/Object.html

Hvis man endvidere prøver at kalde toString brokker compileren sig. Den havde jo været der hvis der var arvet fra javas eget Object.
Avatar billede codemon Nybegynder
06. maj 2002 - 22:50 #14
http://194.192.130.74:8080/Object.html går nok lidt bedre ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester