12. maj 2002 - 15:08Der er
9 kommentarer og 2 løsninger
return kopi af objekt.
Jeg har en metode som henter et objekt i en LinkedList ( et Point) og returnerer det. Dette betyder, at hvis jeg ændrer på det Point der bliver returneret bliver det ændret i LinkedList og jeg får et andet Point næste gang det bliver returneret. Jeg vil derfor gerne vide hvordan jeg i stedet returnere en kopi af Point så jeg kan ændre det uden fare for at det bliver ændret i LinkedList.
Metoden: public Point nextPoint(){ return (Point) points.next(); } hvor points.next() henter næste punkt i LinkedList.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
sørg for at din klasse Point implementerer cloneable og giv den en funktion clone
fx: class Point implements Cloneable {
final public Object clone( ) { try { return super.clone(); } catch ( CloneNotSupportedException e ) { throw new Error( "Umulig fejl i clone.\n" +e.toString() ); } } // end clone
// Altmulig andet du har i den klasse ...
} // endclass Point
hvis alle variable i klassen point er atomære (dvs ikke objekter) er det alt hvad du behøver at gøre. Hvis der er objekter som dataindhold i klassen må du for hvert enkelt vurder om det er ok at det kun er referencen til det objekt der klones eller om der skal oprettes en clonet kopi af det objekt.
og hvis objektet igen indeholder andre objekter ...
bemærk at funktionen clone returnerer typen Objekt, så der skal evt castes:
Det ser meget smart ud. Jeg har selv lavet denne løsning som også ser ud til at virke: public Point nextPoint(){ Point p = (Point) points.next(); Point q = new Point(p.getX(),p.getY(),p.getZ()); return q; } Men jeg ved ikke om jeres løsning er smartere? Hvad er pænest? Er min løsning legitim?
Og selv med clone er jeg lidt i tvivl om om det bliver hurtigt nok for bare et 200*300 pixels stort billede. Java er et langsomt sprog i forhold til fx C.
men prøv at måle på det. tegn 1000 billeder med den ene, og 1000 billeder med den anden; og se så hvor meget forskel det gør.
jakoba > det er en kurve jeg tegner som består af linjestykker, så det er ikke så krævende endda, men jeg har lavet det med clone() nu da det jo er hurtigere. Hvis du vil ligge et svar så du kan få nogle point.
jakoba fik flest point da hans hjælp var mest udførlig. Tak for hjælpen.
Synes godt om
Ny brugerNybegynder
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.