有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

对象间1:m的java聚合

我有一位会员。作为画家、木匠和队长的对象,其下方可能有其他队长、画家或木匠。有没有办法把他们联系起来,这样我就可以得到更多的线索。团队成员,并且能够看到谁在他们的团队领导下工作。团队我了解如何使用数据库,但想看看组合或聚合是否可以处理1:m关系,以及是否有我可以看到的示例。可能需要一个团队。类来链接每个人,或者可以由本地引用处理,但我找不到任何示例


共 (2) 个答案

  1. # 1 楼答案

    因此,听起来您有一种具有这种签名的方法来检索TeamLead列表:

    public List<TeamLead> getTeamLeads()
    

    从这里开始,您希望获得每个团队的成员,您的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...
    }
    

    其中PersonPainterCarpenterTeamLead的基类-在没有类层次结构的情况下,还有其他方法可以做到这一点,但为了更简单的解释,我现在将坚持使用这个方法

  2. # 2 楼答案

    在我看来,你可以通过一个私有集合来实现这一点,这个集合可以由修饰符来管理,修饰符也可以保持反向关系,比如:

    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;
        }
    }
    

    由于您没有团队成员或领导者的公共设置器,因此更改领导者或团队成员的唯一方法是使用addTeamMember和removeTeamMember方法,这样您就拥有了由这些方法控制的双向关系

    我希望这能有所帮助