有没有一种好方法来维护对在构造函数中创建的对象的引用,该对象需要传递给某些扩展类的超级构造函数(除了使其可以从超类访问或将其作为参数传递给构造函数)?
让我用一个例子来澄清一下。参加这个课程(我无法修改,也无法访问 foo):
class TestA {
TestA(Object foo) {}
}
现在,我想扩展这个类如下:
class TestB extends TestA {
Object myCopyOfFoo;
TestB() {
super(new Object());
}
}
有没有好的方法来存储创建new Object()
的myCopyOfFoo
?
这三个想法都不起作用:
TestB() {
myCopyOfFoo = new Object();
super(myCopyOfFoo);
}
(错误:构造函数调用必须是构造函数中的第一条语句)
TestB() {
super(myCopyOfFoo = new Object());
}
(错误:在显式调用构造函数时无法引用实例字段 myCopyOfFoo)
TestB() {
super(makeFoo());
}
Object makeFoo() {
myCopyOfFoo = new Object();
return myCopyOfFoo;
}
(错误:在显式调用构造函数时无法引用实例方法)
我想我可以执行以下操作,但它既不是线程安全的也不是优雅的:
static Object tempFoo;
TestB() {
super(tempFoo = new Object());
myCopyOfFoo = tempFoo;
}
有人对我有更好的主意吗?为什么我的前两个想法不合法?