我如何模仿这样的东西?

时间:2012-01-04 16:34:01

标签: java object modeling


我有这个机器问题,这是一个让我有点困惑的棘手部分之一。

以下是用例:
学生报名参加。
系统验证没有计划冲突。
系统验证学生是否已采取所需的先决条件。

所以我创建了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());
    }

}

2 个答案:

答案 0 :(得分:0)

考虑添加第二个不带先决条件的构造函数。然后,您不必从API的客户端传入null。

我还会添加一个方便的方法hasPrerequisite()来检查Subject是否有先决条件。这样,API的客户端也不必自行进行空检查。

答案 1 :(得分:-1)

使用Null Object pattern。我建议您使用Guava library,以便可以使用Optional类。 Here is the tutorial解释其用法。