Java 调用构造函数时是否有方法检查对象的实例?

Java 调用构造函数时是否有方法检查对象的实例?,java,Java,我的类有两个构造函数: public Foo( Bar bar, Baz baz ) { // do stuff } public Foo( Bar bar ) { this( bar, new Baz() ); } 现在,Baz有一个构造函数,它接受布尔值。我想传递FooSubclass的这个实例的值。Eclipse给了我一个错误,说“显式调用构造函数时不能引用'this'或'super'” 我看到了一个解释,解释了为什么会发生这种情况,但我只是想知道在这种情况下是否有办法解

我的类有两个构造函数:

public Foo( Bar bar, Baz baz ) {
    // do stuff
}
public Foo( Bar bar ) {
    this( bar, new Baz() );
}
现在,Baz有一个构造函数,它接受布尔值。我想传递FooSubclass的
这个实例的值。Eclipse给了我一个错误,说“显式调用构造函数时不能引用'this'或'super'”


我看到了一个解释,解释了为什么会发生这种情况,但我只是想知道在这种情况下是否有办法解决。

如果我正确理解了你的问题,你可以这样做

public Foo( Bar bar, Baz baz ) {
    // do stuff
}
public Foo( Bar bar ) {
    this( bar, new Baz() );
}
public Foo( Bar bar, boolean flag) {
    this( bar, new Baz(flag) );
}

null
传递给主构造函数,并在其中执行检查:

public Foo( Bar bar, Baz baz ) {
    if (baz == null) {
        baz = new Baz(this instanceof FooSubClass);
    }
    // do stuff
}
public Foo( Bar bar ) {
    this( bar, null );
}

为什么?为什么超类应该知道任何特定的子类?你是不是想用工厂方法来代替呢?这听起来像是类型之间非常不合适的耦合。超类型在编译时甚至不必知道它的子类型存在,以这种方式放入
instanceof
检查时违反了这一点。这不是超类需要知道的。Baz类更需要知道它是否应该允许x。控制功能的布尔值是最终值,因此我需要在构造函数中设置它。所有的子类都需要x为true,除了一个需要x为false的子类。我知道我可以把它传给Foo(Bar),但我想知道是否有一种方法可以不把它传给Foo(Bar)。@TomG我听说了。我想我应该把它传进来,让构造函数
Foo(Bar-Bar,boolean-controlsX)
@chama,或者不代表任何人构造
Baz
——你已经有了一个注入现成Baz的构造函数。这就是我最后要做的。虽然我真的不想让国旗通过。谢谢@查马:从技术上说,你没有。您可以使用该标志创建Baz实例,并使用第一个构造函数。