Gå til innhold

Opprettelse av objekt i metodekall-parameter (Smurf smurfen)


Anbefalte innlegg

Skrevet (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 av jemartinsen81
Videoannonse
Annonse
Skrevet (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 av Moonshine
  • 4 uker senere...
Skrevet

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();

Skrevet (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 slik
Man 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].
  1. Singleton pattern

Endret av pgdx
Skrevet

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!

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...