我毫不怀疑这个问题已经在这里被问过十几次了,但我就是找不到满意的答案。
我有一个类族,我只想通过这样的静态方法由抽象父类实例化(我在这里可能有错别字,我正在输入但没有尝试编译)。
public abstract class Papa {
public static Papa newInstance() {
String strClass = Papa.figureOutTheNameOfChildClassToInstantiate();
Papa papa = (Papa) Class.forName(strClass).newInstance();
return papa;
}
public abstract void doSomething();
...
}
public class Child extends Papa {
public void doSomething() { /* Do something */ }
}
这或多或少是我现在所拥有的。我想做的是确保 Child 只能由工厂方法 Papa.newInstance() 实例化。我试图通过将 Child 的无参数构造函数设为私有来做到这一点,但是 Papa 无法实例化它。
所以,我的问题是,如何确保子实例仅由工厂方法 Papa.newInstance() 创建?