在java中实现1对1类
我在java中实现1对1关联时遇到了一个问题。例如,请考虑以下类图: 我是这样实现的:在java中实现1对1类,java,uml,one-to-one,Java,Uml,One To One,我在java中实现1对1关联时遇到了一个问题。例如,请考虑以下类图: 我是这样实现的: public class Student{ private AttendanceRole attendance; public Student(AttendanceRole attendance){ this.attendance=attendance; addTwoWayLink(this); //creates the two-way link betwe
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;
}
}
问题是:
我假设我创建了一个学生对象,并希望更改学生的出勤角色。在本例中,我调用setAttendanceOLE方法。但我必须给它一个对象作为参数。因为这是一个1对1的关系,所以我给出的参数也有一个与之关联的student。所以,这是一个问题。此外,由于这是一个1对1的关联,我无法创建没有学生链接的AttendanceOLE对象。当我第一次尝试创建一个student对象并调用其构造函数时,也会出现同样的情况。我可以将null作为参数值,但在这种情况下,我不破坏1对1关系约束吗?我能怎么办
2另外,我设计了这个类,这样我们就可以创建一个学生对象并设置它的角色。我的意思是我们不能创建一个对象并设置它的学生。这是个坏主意吗?还是由设计师决定先创建哪个对象
谢谢你试着重新安排你的课程:
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;
}
}
我建议你设计如下的东西
public interface AttendanceRole {
}
public class FullTimeStudent implements AttendanceRole {
}
public class PartTimeStudent implements AttendanceRole {
}
public class Student {
private AttendanceRole attendaceRole;
public AttendanceRole getAttendanceRole(){
return attendaceRole;
}
public void setAttendaceRole(AttendaceRole attendaceRole)}
this.attendaceRole = attendaceRole;
}
}
创建学生对象时,传递相应的全职/兼职考勤角色
创建学生对象的代码示例:
你到底想完成什么 你可以用类似天鹰上尉的答案的枚举来试试 或者您可以尝试使用继承:
public abstract class Student{
public void methodA() { ... }
public void methodB();
}
public class FullTimeStudent extends Student {
public void methodB(){ //fulltime implementation }
}
public class PartTimeStudent extends Student {
public void methodB(){ //parttime implementation }
}
由于简单的setAttendanceOleAttendanceOLE方法不可能满足约束,因此您的学生类不能有这样的方法 由于不可能创建满足约束的OLE,因此不能独立创建此类对象。是的,真的。作为一名学生和一名学生是如此紧密地联系在一起,他们实际上并不是完全分开的班级 常量不变量只能在可访问方法返回时应用。私有方法和构造函数不需要满足它们。考虑将AuthDunCurror作为嵌套类的学生,并使用工厂函数代替学生的公共构造函数。
AttendanceRole.getStudent方法使用特殊语法Student。这。AttendanceRole真的需要对Student的引用吗?谢谢,但是setter方法中不会出现同样的问题吗?你能告诉我如何在那个设计中实现setter方法吗?实际上我想实现图中给出的类图。在您的代码中,全职和兼职学生都是student的子类,但图片中的情况并非如此。我想实现图片中的确切情况,看看Apurv给出的情况。如果AttentDancerole真的需要学生参考,这不是答案。
public abstract class Student{
public void methodA() { ... }
public void methodB();
}
public class FullTimeStudent extends Student {
public void methodB(){ //fulltime implementation }
}
public class PartTimeStudent extends Student {
public void methodB(){ //parttime implementation }
}
public class Student {
public abstract class AttendanceRole {
...
public final Student getStudent() {
return Student.this;
}
}
private final class FullTimeStudent extends AttendanceRole {
...
}
private AttendanceRole role;
private Student() {
...
// this.role is null
}
public static Student createFullTimeStudent() {
final Student s = new Student();
s.role = new FullTimeStudent();
return s;
}
public final AttendanceRole getRole() {
return role;
}