jemartinsen81 Skrevet 25. oktober 2007 Skrevet 25. oktober 2007 (endret) Jeg er vant til å bruke metodekall slik som dette: lagNySmurf(smurfNavn, smurfFarge) Smurf smurf = new Smurf(); smurf.settSmurfNavn(smurfNavn); smurf.settSmurfFarge(smurfFarge); Hvordan fungerer det igrunn dersom man er nødt til å lage en smurf gjennom følgende metodekall istedet? lagNySmurf (Smurf smurfen) BlueJ, som vi bruker, spør meg da om å taste inn noen informasjon mellom parantesene når jeg kjører metodekallet. Hva slags informasjon er det meningen at jeg skal taste inn der? Jeg har prøvd det aller meste uten hell. Jeg snakker altså om et SmurfKlient-program som prøve å lage et Smurf objekt. Takk. Endret 25. november 2007 av jemartinsen81
Moonshine Skrevet 25. oktober 2007 Skrevet 25. oktober 2007 (endret) Må du ta inn et objekt? Da kan du alltids endre selve objektet slik (men pass på nullpekere): public void lagNySmurf(Smurf smurfen) { smurfen.settSmurfNavn("navn"); smurfen.settSmurfFarge(Color.BLUE); } Ellers kan du returnere et smurfeobjekt: public Smurf lagNySmurf() { Smurf smurfen = new Smurf(); smurfen.settSmurfNavn("navn"); smurfen.settSmurfFarge(Color.BLUE); return smurfen; } Den sistnevnte brukes da på noe ala denne måten: Smurf smurfenMin = smurfen.lagNySmurf(); Vær obs på at da trenger du allerede et smurfeobjekt. Det kan også være interessant å lage sistnevnte metode statisk, da du kan opprette et smurfeobjekt slik: Smurf s = Smurf.lagNySmurf(); Endret 25. oktober 2007 av Moonshine
jemartinsen81 Skrevet 25. oktober 2007 Forfatter Skrevet 25. oktober 2007 (endret) Takk skal du ha, det var hjelpsomt, går fint nå. "Returnere et smurfeobjekt" he he. Endret 25. oktober 2007 av jemartinsen81
boemane Skrevet 18. november 2007 Skrevet 18. november 2007 Det er vel strengt tatt en oppgave for konstruktøren. public class Smurf { private String navn; private Color farge; public Smurf() { this.navn = "smurf"; this.farge = Color.BLUE; } public Smurf(String navn Color farge) { this.navn = navn; this.farge = farge; } //Gettere og settere for navn og farge } Deretter oppretter du nye objekter slik: //Ny Smurf med standard-verdier Smurf s1 = new Smurf(); //Ny smuft med valgte verdier Smurf s2 = new Smurf("Slalom Smurfen", Color.GREEN;); Videre kan du også i Smurfe-objektet ha en konstruktør som tar imot et Smurfeobjekt, som kopierer verdiene fra parameter-smurfen til denne smurfen. Istedet for metoden "lagnysmurf()", er det standard å benytte metoden clone(), som returnerer et nytt helt identisk objekt. Da må du også implementere "Cloneable" i Smurfeklassen. Deretter kan du kalle //Kopier Smurf s2 inn i nySmurf Smurf nySmurf = s2.clone();
pgdx Skrevet 18. november 2007 Skrevet 18. november 2007 (endret) Det er vel strengt tatt en oppgave for konstruktøren.Ikke strengt tatt, nei. Man må bruke en konstruktør for å lage et objekt, ja, men det hender at man ønsker å gjøre konstruktøren private.Deretter oppretter du nye objekter slikMan kan ofte bruke konstruktøren med new-nøkkelordet fra andre klasser, ja, men det er slettes ikke alltid slik. Hvis du vil ha et eksempel, så er det første som popper opp i hodet mitt java.util.logger, hvor du må be Logger.getLogger om å gi deg et objekt, konstruktøren er nemlig ikke synlig.Videre kan du også i Smurfe-objektet ha en konstruktør som tar imot et Smurfeobjekt, som kopierer verdiene fra parameter-smurfen til denne smurfen.Tja, det kan vel ha sin nytte, men da er det vel like greit å bruke clone, som du påpeker nedenfor:Istedet for metoden "lagnysmurf()", er det standard å benytte metoden clone(), som returnerer et nytt helt identisk objekt. Da må du også implementere "Cloneable" i Smurfeklassen.Det er helt (100%) feil at det er standard å kalle clone. Man har veldig mange tilfeller hvor man ønsker å få et objekt via en annen metode[1]. Singleton pattern Endret 18. november 2007 av pgdx
fatalicus Skrevet 25. november 2007 Skrevet 25. november 2007 Vet dette er en gammel tråd (takk gud for moderatorer som bumper gamle tråder), men jeg bare må si dette: Fy faen så morsom tråd å lese! Er nesten som om smurfene skulle gå hi-tech!
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå