从另一个构造函数中调用带有共享对象的构造函数init

jsc*_*man 2 java constructor

因此,我有一个具有以下构造函数的类:

public SomeClass() {
    this.foo = new Foo();
    this.bar = new Bar(foo); // Bar construction requires foo
}

public SomeClass(Foo foo, Bar bar) {
    this.foo = foo;
    this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)

现在,我想通过将默认构造函数更改为以下内容来重新利用第二个构造函数:

public SomeClass() {
    Foo = new Foo();
    this(foo, new Bar(foo));
}
Run Code Online (Sandbox Code Playgroud)

但这无法正常工作

Error:(24, 21) java: call to this must be first statement in constructor
Run Code Online (Sandbox Code Playgroud)

请注意,我不想有2个单独的foo实例。

任何想法如何解决这种情况?

Ell*_*sch 8

为了使用this构造函数,它必须是构造函数的第一行。就像是,

public SomeClass() {
    this(new Foo());
}

public SomeClass(Foo foo) {
    this(foo, new Bar(foo));
}
Run Code Online (Sandbox Code Playgroud)

注意:如果要防止外部调用,可以SomeClass(Foo)构造此构造函数private