如何在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 楼答案
应该避免实例之间的周期性依赖关系——尤其是因为您无法实际创建实例,正如您所发现的那样
如果您确实需要将教师作为主题的属性,一种方法是在
Subject
类上设置一个setter:但是你应该重新审视你的设计,看看你是否能摆脱它们
这里跳出来的事情是,您正在使
Teacher
成为Subject
的一个属性。这在我看来并不正确:首先,很多老师可能教同一门课。(当然,每个老师可能教多个科目)您试图在此处建模的关系如下所示:
Teacher
教授Subject
Subject
由Teacher
教授我会将“is teached by”关系构建为
Teacher
和Subject
类之外的内容,例如:然后你会做一些类似的事情: