3 回答
TA貢獻1851條經(jīng)驗 獲得超3個贊
我可以給你一些你可以嘗試的提示,盡管可能有一些警告:
創(chuàng)建一個單獨的工廠類而不是基類。
在工廠類中將構(gòu)造函數(shù)設為私有
在工廠類中實例化一個虛擬私有對象
讓
MinorEmployeeandAdultEmployee的唯一構(gòu)造函數(shù)接受工廠類的對象。由于私有構(gòu)造函數(shù),工廠對象不能存在于類之外,實際上沒有其他人應該能夠從外部實例化這些類。使用虛擬對象在您的工廠方法中傳遞。
TA貢獻1788條經(jīng)驗 獲得超4個贊
另一種方法是:
您可以將構(gòu)造函數(shù)設為私有并使用輔助方法來識別新實體的請求來自何處。如果來自您想要的地方,則返回對象的新實例,否則您可以拋出異常。
TA貢獻1805條經(jīng)驗 獲得超10個贊
MinorEmployee您可以在和AdultEmployeeas中聲明構(gòu)造函數(shù),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
}
}
添加回答
舉報
