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实例,并使用第一个构造函数。