有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java中同时初始化为“交织”的对象?

我目前正在从事一个Java学校项目,旨在将Java应用程序链接到数据库。 我们必须使用学校模型化的典型示例,由3个班级组成: -老师 -学生 -主题

每堂课都有一定数量的论点,但我的问题是,在一名教师中有一个主课的对象(称为专业),在一名主课中有一个主课的对象(称为主课),知道主课是主课教师的专业

我必须初始化Teacher的ArrayList,我尝试如下操作:

while (rset.next()){
    Prof **toInsert** = new Teacher(rset.getInt("NUM_PROF"),
                             rset.getString("NOM_PROF"),
                             rset.getString("PRENOM_PROF"),
                             rset.getString("ADR_PROF"),
                             rset.getString("CP_PROF"),
                             rset.getString("VILLE_PROF"),
                             **new Subject**(rset.getString("CODE"),
                                        rset.getString("LIBELLE"),
                                        rset.getInt("H_COURS-PREV"),
                                        rset.getInt("H_COURS_REA"),
                                        rset.getInt("H_TP_PREV"),
                                        rset.getInt("H_TP_REA"),
                                        rset.getString("DISCIPLINE"),
                                        rset.getInt("COEFF_CC"),
                                        rset.getInt("COEFF_TEST"),
                                        **toInsert**);
    ListeProf.add(i, toInsert);
    ++i;
}

我的教师类构造函数如下所示:

public Teacher(..., Subject speciality){
    ...
    m_speciality = speciality;
}

我的主题类构造函数如下所示:

public Subject(..., Teacher inCharge){
    ...
    m_inCharge = inCharge;
}

正如你所看到的,我这里的问题是,我想要创建的主题的构造器是toInsert老师的专业,需要使用这个老师。 有没有一种方法可以同时初始化这两个对象,或者我应该分别创建这两个对象,然后使用setter将它们彼此绑定

很抱歉代码中的法语部分,我试着只翻译需要帮助的部分,并提前感谢您的回答^^


共 (1) 个答案

  1. # 1 楼答案

    应该避免实例之间的周期性依赖关系——尤其是因为您无法实际创建实例,正如您所发现的那样

    如果您确实需要将教师作为主题的属性,一种方法是在Subject类上设置一个setter:

      while (rset.next()) {
        Subject subject = new Subject(... /* don't specify Teacher as parameter */);
    
        Teacher teacher = new Teacher(..., subject);
    
        subject.setTeacher(teacher);
      }
    

    但是你应该重新审视你的设计,看看你是否能摆脱它们

    这里跳出来的事情是,您正在使Teacher成为Subject的一个属性。这在我看来并不正确:首先,很多老师可能教同一门课。(当然,每个老师可能教多个科目)

    您试图在此处建模的关系如下所示:

    • Teacher教授Subject
    • SubjectTeacher教授

    我会将“is teached by”关系构建为TeacherSubject类之外的内容,例如:

    // If only one teacher teaches a subject.
    Map<Subject, Teacher> isTaughtBy;
    

    然后你会做一些类似的事情:

      Map<Subject, Teacher> isTaughtBy;
      while (rset.next()) {
        Subject subject = new Subject(... /* don't specify Teacher as parameter */);
    
        Teacher teacher = new Teacher(..., subject);
    
        isTaughtBy.put(subject, teacher);
      }