3 回答

TA贡献1851条经验 获得超3个赞
我可以给你一些你可以尝试的提示,尽管可能有一些警告:
创建一个单独的工厂类而不是基类。
在工厂类中将构造函数设为私有
在工厂类中实例化一个虚拟私有对象
让
MinorEmployee
andAdultEmployee
的唯一构造函数接受工厂类的对象。由于私有构造函数,工厂对象不能存在于类之外,实际上没有其他人应该能够从外部实例化这些类。使用虚拟对象在您的工厂方法中传递。

TA贡献1805条经验 获得超10个赞
MinorEmployee您可以在和AdultEmployeeas中声明构造函数,private然后在您的工厂方法中使用反射:
public static Employee create(LocalTime birthdate) {
try {
Class<? extends Employee> clazz;
if (omitted) {
clazz = MinorEmployee.class;
} else {
clazz = AdultEmployee.class;
}
Constructor<? extends Employee> cons = clazz.getConstructor();
cons.setAccessible(true);
return cons.newInstance();
} catch (NoSuchMethodException | SecurityException
| InstantiationException | IllegalAccessException
| InvocationTargetException ex) {
// handle the exception
}
}
添加回答
举报