如何在Java中建立Can-Be-A关系?
问题描述:
比方说,我有User
班,User
可以是Employee
,Applicant
(既有职位,但在其他地方申请工作),或者都没有(失业和不申请工作)。如何在Java中建立Can-Be-A关系?
我如何定义在Java使得User
可强制转换为Employee
但只有当他们实际上被采用,并且同样为其他场景,如果他们失业(不能被强制转换为Employee
或Applicant
这种关系而不是申请工作)?
这是否需要为每个组合继承User
的单独类别,即Employee
,Applicant
, EmployeeAndApplicant
?
答
只是拼出什么,我想在评论(未测试)
public class User {
/** this user’s employment, or null if unemployed */
private EmployeeRecord employment;
/** this user’s application, or null if not an applicant for any job */
private ApplicantRecord application;
// getters, setters etc.
}
你甚至可以使用,比如说,Collection<ApplicantRecord>
模型,用户可以在被申请一种以上的工作本来是时间,如果相关的话。
在运行时验证铸件。如果你想确保它是正确的类型,首先检查。 – shmosel
您可以使用组合和/或多个接口来支持组合。 – shmosel
听起来像“被雇用”和“应用”是状态而不是“用户”的固有特性,所以我通常会将它们拆分为子记录。 – chrylis