Toon posts:

[JAVA] variabele scope vraag

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Waarschijnlijk een erg simpele vraag, maar ik kan er weinig relevante informatie over vinden.

Ik heb een arraylist temp die ik toevoeg aan een hashmap.

this.result.put(kolomNaam, this.temp);

Vervolgens gooi ik de arraylist leeg met:

this.temp.clear();

Het gedrag wat ik nu krijg is dat de hashmap met daarin deze arraylist nu ook leeg is. Ik vermoed??? dat dit komt, omdat JAVA this.temp als referentie meegeeft.

Hoe kan ik dit gedrag voorkomen, zodat de hashmap niet leeggehaald wordt?
Dien ik de variabele anders te declareren?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

objecten (lees: niet primitieven) worden in java altijd als referentie meegegeven. Dit had je natuurlijk kunnen weten als je je wat verdiept had in de taal (ik vraag me trouwens af hoe je zover hebt kunnen komen zonder dat essentiele gedeelte niet te weten :))

Je moet dus een kopie maken van je arraylist

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
.oisyn schreef op 06 May 2003 @ 11:58:
objecten (lees: niet primitieven) worden in java altijd als referentie meegegeven. Dit had je natuurlijk kunnen weten als je je wat verdiept had in de taal (ik vraag me trouwens af hoe je zover hebt kunnen komen zonder dat essentiele gedeelte niet te weten :))

Je moet dus een kopie maken van je arraylist
Het is niet mogelijk om dit in je variabele-declaratie te defineren?
Op het moment dat ik een andere arraylist maak en ik zeg temp = temp2 dan blijf ik toch hetzelfde probleem houden? Of dien ik dan de clone() (zo uit het hoofd) methode te gebruiken? En dat ik zonder dat essentiele gedeelte al zo ver ben, wordt ik soms ook niet goed van :+

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
Verwijderd schreef op 06 May 2003 @ 12:14:
[...]
Het is niet mogelijk om dit in je variabele-declaratie te defineren?
Op het moment dat ik een andere arraylist maak en ik zeg temp = temp2 dan blijf ik toch hetzelfde probleem houden? Of dien ik dan de clone() (zo uit het hoofd) methode te gebruiken? En dat ik zonder dat essentiele gedeelte al zo ver ben, wordt ik soms ook niet goed van :+
Nee, Ja, Ja(Nee: new ArrayList(oldArray), een clone is 'shallow'))

dit is trouwens in zowat elke programmeer taal die ik ken voor 'arrays' (of collections).

[ Voor 10% gewijzigd door hobbit_be op 06-05-2003 12:20 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 06 May 2003 @ 12:14:
[...]

Het is niet mogelijk om dit in je variabele-declaratie te defineren?
nee.
Op het moment dat ik een andere arraylist maak en ik zeg temp = temp2 dan blijf ik toch hetzelfde probleem houden?
ja.

Je maakt een object aan, en die staat ergens in het geheugen. Temp en temp2 verwijzen naar hetzelfde object.
Of dien ik dan de clone() (zo uit het hoofd) methode te gebruiken?
Dan maak je idd een copy.
En dat ik zonder dat essentiele gedeelte al zo ver ben, wordt ik soms ook niet goed van :+
je bent niet de enigste.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

hobbit_be schreef op 06 May 2003 @ 12:19:
[...]


(Nee: new ArrayList(oldArray), een clone is 'shallow'))
niets mis met een shallow copy van een collection. Dit is natuurlijk wat anders als je de objecten in de collectie zelf wilt aanpassen, maar zolang je gewoon alleen de collectie aan wilt passen voldoet een shallow copy :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
idd :) niet aan gedacht!!! :)
Pagina: 1