我有一个关于在Java中实现1对1关联的问题。例如,考虑以下类图:



我这样实现:

public class Student{
    private AttendanceRole attendance;

    public Student(AttendanceRole attendance){
        this.attendance=attendance;
        addTwoWayLink(this); //creates the two-way link between objects
    }

    public void setAttendanceRole(AttendanceRole a){ //if a students changes from
        attendance = a;                              //part time to full time
    }

}

public class AttendanceRole{
    private Student student;

    void addTwoWayLink(Student student){
        this.student=student;
    }

}


这是问题所在:

1)假设我创建了一个学生对象,并且我想更改学生的出勤角色。在这种情况下,我调用setAttendanceRole方法。但是我必须给它一个AttendanceRole对象作为参数。由于这是一对一的关系,因此我给出的参数也有一个与之关联的学生。因此,这是一个问题。另外,如果没有到学生的链接,我也无法创建AttendanceRole对象,因为这是一对一的关联。当我第一次尝试创建一个学生对象并调用其构造函数时,会发生相同的情况。我可以将null作为参数值,但是在这种情况下,我不会损害1对1的关系约束吗?我该怎么办?

2)此外,我设计了此类,以便我们可以创建一个学生对象并设置其AttendanceRole。我的意思是我们不能创建一个AttendanceRole对象并设置它的学生。这是一个坏主意吗?还是由设计者决定首先要创建哪个对象。

谢谢

最佳答案

尝试重新安排您的课程:

public enum ROLE_TYPE { FULL_TIME, PART_TIME }

public class student {

    private ROLE_TYPE attendanceRole;

    public SetRoleType( ROLE_TYPE type )
    {
        this.attendanceRole = type;
    }

    public GetRoleType()
    {
        return attendanceRole;
    }
}

10-07 12:26