共有3个课程:Base
,Derived
和Registry
:
class Base {
Base() {
Registry.register(this);
}
}
class Derived extends Base {
Derived() {
// throws an exception here
}
}
当Registry
构造函数抛出异常时,有没有办法从Derived
取消注册半构造对象?
我知道这是一种反模式,因为this
在构造函数中使用。我正在寻找更好的设计,例如Base.listInstances()
。
答案 0 :(得分:0)
如果您有取消注册方法,可以这样做。
class Base {
Base() {
Registry.register(this);
}
}
class Derived extends Base {
super();
try {
// do stuff
} catch (Exception e) {
Registry.unregister(this);
throw e;
}
}
如果不是,您只应在成功创建Object时注册它(如果允许,则必须修改Base
)。