这是我想要做的(在Java 1.6中):
public class Foo {
public Foo() {
Bar b = new Bar();
b.setSomeData();
b.doSomethingElse();
this(b);
}
public Foo(Bar b) {
// ...
}
}
编译器说:
call to this must be first statement in constructor
有什么解决方法吗?
您可以这样实现:
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
参数处于最终状态。这可能会出现问题。)
最后,我同意静态工厂方法可以替代此方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句