我如何在Java中为“可以成为”的关系建模?

我如何在Java中为“可以成为”的关系建模?,java,inheritance,model,multiple-inheritance,composition,Java,Inheritance,Model,Multiple Inheritance,Composition,假设我有一个用户类,一个用户可以是雇员,一个申请者,既有工作又在别处申请工作,或者既没有失业也没有工作 我如何在java中定义这种关系,使用户可以转换为员工,但只有在他们实际受雇的情况下,同样,对于其他场景,如果他们失业且没有申请工作,则不能转换为员工或申请人 这是否需要为每个组合从用户继承一个单独的类,即Employee、applicator、employeeandapplicator?只是为了阐明我认为未测试的注释中的含义 public class User { /** this

假设我有一个用户类,一个用户可以是雇员,一个申请者,既有工作又在别处申请工作,或者既没有失业也没有工作

我如何在java中定义这种关系,使用户可以转换为员工,但只有在他们实际受雇的情况下,同样,对于其他场景,如果他们失业且没有申请工作,则不能转换为员工或申请人


这是否需要为每个组合从用户继承一个单独的类,即Employee、applicator、employeeandapplicator?

只是为了阐明我认为未测试的注释中的含义

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.

}

您甚至可以使用(比如)集合来建模用户一次可能申请多个作业(如果相关)。

在运行时验证强制转换。如果您想确保它是正确的类型,请首先检查。您可以使用组合和/或多个接口来支持组合。这听起来像是在使用和应用状态,而不是用户的固有品质,所以我通常会把它们分割成子记录,我的意思是你可以有一些User的子类来实现Employee或applicator,或者两者兼而有之。但我倾向于同意@chrylis的观点,继承在这里可能不合适。@shoe我的意思恰恰相反。用户应在JPA中将外键关系引用到EmployeeRecord和ApplicationRecord。喜欢组合而不是继承。