Hej folkens, sidder og undrer mig over et lille problem mht parameter passing i Java. Har kunnet læse mig frem til det er pass by value i java, og når det kommer til objekter er det referencen til et objekt der sendes med som value.
Følgende undrer mig dog på basis af ovenstående definition:
Har man følgende klassestump:
- public class SecondObject
- {
- TestObject gemtTest;
-
- public SecondObject( TestObject input ){
- this.gemtTest = input;
- }
- }
Og kører følgende stykke kode et andet sted:
- TestObject test;
- test = new TestObject( new SecondObject(test) );
Man har altså et TestObject der indeholder et SecondObject som igen indeholder et TestObjekt, altså en meget stærk binding (som man bør undgå).
Som jeg forstår det ville man sende referencen til det uinitialiserede objekt med til SecondObjekt der så ville gemme denne reference. Når TestObject så er skabt vil SecondObject indeholde en reference til TestObject. Men det gør den ikke, gemtTest indeholder NULL.
Jeg er kommet frem til det måske kan skyldes at TestObject test; er sat til NULL pr default og først får en egentlig reference addresse når objektet skabes og kan derfor ikke sendes med som parameter før efter det er skabt. Er dette korrekt og i så fald er der nogen der kan give en grund til dette implementations valg i Java?
Man kan løse det ved at splitte koden op i 3 linier med en setmetode i Secondobject, som:
- SecondObject s = new SecondObject();
- TestObject test = new TestObject(s);
- s.setTestObject(test);
Indlæg senest redigeret d. 24.11.2008 13:09 af Bruger #6389