2017-09-18 45 views
0

比方说,我有User班,User可以是Employee,Applicant(既有职位,但在其他地方申请工作),或者都没有(失业和不申请工作)。如何在Java中建立Can-Be-A关系?

我如何定义在Java使得User可强制转换为Employee但只有当他们实际上被采用,并且同样为其他场景,如果他们失业(不能被强制转换为EmployeeApplicant这种关系而不是申请工作)?

这是否需要为每个组合继承User的单独类别,即Employee,Applicant, EmployeeAndApplicant

+0

在运行时验证铸件。如果你想确保它是正确的类型,首先检查。 – shmosel

+1

您可以使用组合和/或多个接口来支持组合。 – shmosel

+1

听起来像“被雇用”和“应用”是状态而不是“用户”的固有特性,所以我通常会将它们拆分为子记录。 – chrylis

回答

1

只是拼出什么,我想在评论(未测试)

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>模型,用户可以在被申请一种以上的工作本来是时间,如果相关的话。