pgsandstrom
pgsandstrom

Reputation: 14399

How to call superconstructor in a neat way

So here is my code:

public MyClass (int y) {
    super(y,x,x);
    //some code
}

My problem is that in this case i want to generate a 'x' and sent to the super constructor. However the call to the superconstructor must be the first line in this constructor. Of course I could do something like this:

int x;
{
    x = generateX();
}

But this feels ugly, and then the code will run no matter what constructor I use, which feels not so nice. Right now I am consider encapsulating my whole object in another object that only calculates x and then starts this object. Is this the best approach?

Upvotes: 2

Views: 274

Answers (3)

David Soroko
David Soroko

Reputation: 9086

A builder pattern may also be relevant here. A bit heavy weight for the given example but if there is further setup to be done on MyClass it should be considered.

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1500615

How about:

public MyClass(int y) {
  this(y, generateX());
  //some code
}

private MyClass(int y, int x) {
  super(y, x, x);
  //some code
}

private static int generateX() {
  return 10;
}

If you're happy for generateX to be called twice, you don't need the extra constructor - it's just here to allow the same value to be used for both superclass constructor parameters.

Upvotes: 12

Poindexter
Poindexter

Reputation: 2425

What about super(y, generateX(), generateX())

Upvotes: 2

Related Questions