Gå til innhold

overloade konstruktør, "videresende" instansiering


Anbefalte innlegg

Skrevet

Jeg har to konstruktører; en no-arg, og en som tar inn en boolean. Er det mulig å "videresende" instansieringen til no-arg konstruktøren om boolean-verdien er false? Som et metodekall på en måte. Om boolean-argumentet er false, skal den gjøre nøyaktig det samme som no-arg'en.

Videoannonse
Annonse
Skrevet (endret)

Dog det er ofte vanligere at den tomme konstruktøren kaller den ikke-tomme konstruktøren med de nødvendige argumenter. Det teller selvsagt ikke i ditt tilfelle, men vanligvis vil man velge å strukturere det slik:

class MyClass {
  public MyClass() {
  this("default");
  }
  public MyClass(String name) {
  this.name = name;
  }
}

Endret av pgdx
Skrevet
Jada, det går helt greit.

 

public MyClass()
{
//do what you need here
}

public MyClass(boolean someTest)
{
if(someTest)
{
	//do something
}else{
   this();
}
}

 

Mer info her...

Et konstruktorkall kan bare brukes som foerste argument i en annen konstruktor, saa eksempelet ditt over vil nok ikke fungere.

Skrevet (endret)
Et konstruktorkall kan bare brukes som foerste argument i en annen konstruktor, saa eksempelet ditt over vil nok ikke fungere.

 

Whoops, my bad.

Flott at du fikk korrigert det :)

Ser at jeg maa korrigere meg selv her. Jeg mente "som foerste statement" og ikke "som foerste argument" :blush:

Endret av Patton
Skrevet
Jada, det går helt greit.

 

public MyClass()
{
//do what you need here
}

public MyClass(boolean someTest)
{
if(someTest)
{
	//do something
}else{
   this();
}
}

 

Mer info her...

Et konstruktorkall kan bare brukes som foerste argument i en annen konstruktor, saa eksempelet ditt over vil nok ikke fungere.

Dette blir mer korrekt:

public MyClass() {
  this(false);
}

public MyClass(boolean someTest) {
if(someTest) {
	//do something
} else {
   // do something else
}
}

Ps: Husk at brackets skal begynne på samme linje som uttrykket, ikke på neste linje.

Skrevet

I java er det vel en konvensjon at bracets skal starte på samme linje som uttrykket. I C/C++ er det derimot mest brukt at klasser og metoder har startbraceten under uttrykket, mens resten av de starter som i java. Hvorfor det er blitt slik vet jeg ikke, da jeg synes det er greiere å se hvor en metode/klasse starter i C++ en i java.

Skrevet
Ps: Husk at brackets skal begynne på samme linje som uttrykket, ikke på neste linje.
Er ikke det mer et spørsmål om smak og behag?
Nei, men det er et spørsmål om konvensjoner.

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...