Java Constructor – How to Call a Constructor from Another Constructor

constructorjava

I have a constructor

private Double mA;
private Double mB;

Foo(Double a) {
  mA = a;
  mB = a + 10;
}

Foo(Double a, Double b) {
  mA = a;
  mB = b;
  // some logic here
}

if I make a call to second constructor like this:

Foo(Double a) {
  Double b = a + 10;
  this(a, b);
}

than compiler tells me, that constructor should be the first statement. So do I need to copy all logic from the second constructor to first one?

Best Answer

Why don't you just do this(a, a+10) instead?

Note that this() or super() must be the first statement in a constructor, if present. You can, however, still do logic in the arguments. If you need to do complex logic, you can do it by calling a class method in an argument:

static double calculateArgument(double val) {
    return val + 10; // or some really complex logic
}

Foo(double a) {
    this(a, calculateArgument(a));
}

Foo(double a, double b) {
    mA = a;
    mB = b;
}
Related Question