Вы можете реализовать его следующим образом:
public class Foo {
public Foo() {
this(makeBar());
}
public Foo(Bar b) {
// ...
}
private static Bar makeBar() {
Bar b = new Bar();
b.setSomeData();
b.doSomethingElse();
return b;
}
}
Метод makeBar
должен быть статическим, поскольку объект, соответствующий this
, недоступен в точке, где вы вызываете метод.
Кстати, этот подход имеет то преимущество, что передает полностью инициализированный Bar
объект Foo(Bar)
.(@RonU отмечает, что его подход этого не делает. Это, конечно, означает, что его конструктор Foo(Bar)
не может предположить, что его аргумент Foo
находится в своем конечном состоянии. Это может быть проблематично.)
Наконец, я согласенчто метод статической фабрики является хорошей альтернативой этому подходу.