【发布时间】:2012-10-04 22:49:42
【问题描述】:
有没有一种好方法来维护对在构造函数中创建的对象的引用,该对象需要传递给某些扩展类的超级构造函数(除了使其可以从超类访问或将其作为构造函数传递给参数)?
让我用一个例子来澄清一下。参加这个课程(我无法修改并且无法访问 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;
}
有人对我有更好的想法吗?为什么我的前两个想法不合法?
【问题讨论】:
标签: java constructor field super