Java 对象之间具有1:m的聚合
我有member.objects,它们是画家、木匠和队长,可以有其他队长、画家或木匠在它们下面。有没有办法将他们联系起来,这样我就可以获得TeamLeads.team,并且能够看到谁在他们的TeamLeads.team下工作。我了解如何使用数据库,但想看看组合或聚合是否可以处理1:m关系,以及是否有我可以看到的示例。它可能需要一个Team.class来链接每个人,或者可以由本地引用来处理,但我找不到任何示例。因此,听起来您有一个具有此类签名的方法来检索TeamLead列表:Java 对象之间具有1:m的聚合,java,relationship,composition,Java,Relationship,Composition,我有member.objects,它们是画家、木匠和队长,可以有其他队长、画家或木匠在它们下面。有没有办法将他们联系起来,这样我就可以获得TeamLeads.team,并且能够看到谁在他们的TeamLeads.team下工作。我了解如何使用数据库,但想看看组合或聚合是否可以处理1:m关系,以及是否有我可以看到的示例。它可能需要一个Team.class来链接每个人,或者可以由本地引用来处理,但我找不到任何示例。因此,听起来您有一个具有此类签名的方法来检索TeamLead列表: public Lis
public List<TeamLead> getTeamLeads()
其中,
Person
是Painter
、Carpenter
和TeamLead
的基类-在没有类层次结构的情况下,还有其他方法可以做到这一点,但为了更简单的解释,我现在还是坚持这一点。在我看来,你可以通过一个私人集合来实现这一点,这个集合可以由修饰符管理,修饰符也可以维护反向关系,比如:
public class TeamLead {
private final List<Person> team = new ArrayList<Person> ();
// You can of course populate this list however is best for your code
public void addTeamMember(Person p) {
team.add(p);
}
public List<Person> getTeam() {
return team;
}
// more code...
}
public class TeamMember {
private TeamMember leader;
private Set<TeamMember> teamMembers= new HashSet<TeamMember>();
public Set<TeamMember> getTeamMembers(){
return new HashSet<TeamMember>(teamMembers);
}
public void addTeamMember(TeamMember member){
if(member.leader!=null){
member.leader.removeTeamMember(member);
}
member.leader=this;
teamMembers.add(member);
}
public void removeTeamMember(TeamMember member){
member.leader=null;
teamMembers.remove(member);
}
public TeamMember getLeader(){
return leader;
}
}
公共类团队成员{
私人团队成员领导;
private Set teamMembers=new HashSet();
公共集getTeamMembers(){
返回新的哈希集(团队成员);
}
public void addTeamMember(团队成员){
if(member.leader!=null){
成员.领导者.移除团队成员(成员);
}
member.leader=this;
团队成员。添加(成员);
}
public void removeTeamMember(团队成员){
member.leader=null;
团队成员。删除(成员);
}
公共团队成员getLeader(){
返回领导;
}
}
由于您没有团队成员或领导者的公共设置器,因此更改领导者或团队成员的唯一方法是使用addTeamMember和removeTeamMember方法,这样您就拥有了由这些方法控制的双向关系
我希望这能有所帮助