我有这个机器问题,这是一个让我有点困惑的棘手部分之一。
以下是用例:
学生报名参加。
系统验证没有计划冲突。
系统验证学生是否已采取所需的先决条件。
所以我创建了4个对象,分别称为Student,Section,Schedule和Subject。
我只会告诉你我的“主题”课程,因为这是我感到困惑的地方。
我感到困惑的部分是:
系统验证学生是否已采取所需的先决条件。
我该如何正确建模? 我有一个先决条件,它是一个主题对象,但如果主题没有先决条件怎么办?我犹豫不决,因为我不能做出类似的事情:
Subject math01 = new Subject(1,"math01",null);
我认为在对象上传递null是不合适的。我想避免nullpointer异常。我该如何解决这个问题? :( 我想我做错了。
public class Subject {
//Each subject is worth three (3) units.
private int units = 3;
private int subjectID;
private String subjectName;
private Subject prerequisite; //<----How do I express that a subject has a prerequisite? Am I doing this right?
public Subject(int subjectID, String subjectName, Subject prerequisite) {
this.subjectID = subjectID;
this.subjectName = subjectName;
this.prerequisite = prerequisite;
}
public int getUnits() {
return units;
}
public int getSubjectID() {
return subjectID;
}
public String getSubjectName() {
return subjectName;
}
public Subject getPrerequisite(){
return prerequisite;
}
public boolean conflictWith(Subject newSubject){
return (this.subjectID == newSubject.getSubjectID());
}
}
答案 0 :(得分:0)
考虑添加第二个不带先决条件的构造函数。然后,您不必从API的客户端传入null。
我还会添加一个方便的方法hasPrerequisite()来检查Subject是否有先决条件。这样,API的客户端也不必自行进行空检查。
答案 1 :(得分:-1)
使用Null Object pattern。我建议您使用Guava library,以便可以使用Optional类。 Here is the tutorial解释其用法。