我目前正在开展一个旨在将Java应用程序链接到数据库的Java学校项目。 我们必须使用由3个类组成的学校模型化的典型示例: -老师 -学生 -subject
每个类都有一些参数,但我遇到的问题是教师中有一个Subject类的对象(称为专业),而Subject中有一个Teacher类的对象(被称为inCharge),知道主题是专业是在教师。
我必须初始化一个教师的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;
}
我的Teacher类构造函数如下所示:
public Teacher(..., Subject speciality){
...
m_speciality = speciality;
}
My Subject类构造函数如下所示:
public Subject(..., Teacher inCharge){
...
m_inCharge = inCharge;
}
正如你所看到的,我的问题是我想要创建的主题的构造函数是toInsert教师的专长,需要使用这个老师。 有没有办法同时进行对象的初始化,或者我应该单独创建两个对象,然后使用setter将它们相互绑定?
对于代码中的法语部分,我试图只翻译需要帮助的部分,并提前感谢您的答案^^
答案 0 :(得分:0)
应避免实例之间的周期性依赖关系 - 尤其是因为您无法实际创建实例,正如您所发现的那样。
如果确实需要将教师作为主题的属性,那么您可以采用的方法是在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
Subject
由Teacher
我将构建"由#34;关系作为Teacher
和Subject
类之外的内容,例如:
// 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);
}