我可以使用我的对象而不完全填充它们吗?

时间:2010-06-08 20:54:44

标签: java

我有情况。我必须在JAVA中创建一个运动俱乐部系统。你应该有一个班级来跟踪俱乐部的名字,总统的名字和俱乐部的分支。对于每个体育分支也应该有一个班级来跟踪球员名单。每个球员也应该有一个姓名,号码,职位和薪水。 所以,我想出了这个。三个单独的课程:

public class Team
{
String clubName;
String preName;
Branch []branches;
}

public class Branch
{
Player[] players;

}

public class Player
{
String name;
String pos;
int salary;
int number;
}

问题是在另一个类中创建Branch []并且在Player []中创建相同的。这有什么比这更简单的了吗?例如,我想仅为俱乐部名称,总裁名称和俱乐部分支添加信息,在这种情况下,我不必输入球员,姓名,工资等,因为他们互相嵌套。我希望我能说清楚。如有其他问题,请咨询。

6 个答案:

答案 0 :(得分:3)

以下是使用传统Accessors/Mutators(getter / setters),constructorsLists的方案的更完整,更正式的示例。下面的main()方法说明了如何使用您的类。

public class SportsClub
{
    public static void main(String[] args)
    {
        //Create a team without any branches
        Team myTeam = new Team("Southpaws", "South");

        //Create a new Branch without any players
        Branch myBranch = new Branch();

        //Add myBranch to myTeam
        myTeam.getBranches().add(myBranch);

        //Create a new player
        Player myPlayer = new Player("Bob", "Center", 120, 3);

        //Add myPlayer to myBranch (and therefore myTeam)
        myBranch.getPlayers().add(player);
    }
}


public class Team
{
    private String clubName;
    private String preName;
    private List<Branch> branches;

    public Team(String clubName, String preName)
    {
        this.clubName = clubName;
        this.preName = preName;
        branches = new ArrayList<Branch>();
    }

    public String getClubName() { return clubName; }
    public String getPreName() { return preName; }
    public List<Branch> getBranches() { return branches; }

    public void setClubName(String clubName) { this.clubName = clubName; }
    public void setPreName(String preName) { this.preName = preName; }
    public void setBranches(List<Branch> branches) { this.branches = branches; }
}

public class Branch
{
    private List<Player> players = new ArrayList<Player>();

    public Branch() {}

    public List<Player> getPlayers() { return players; }
    public void setPlayers(List<Player> players) { this.players = players; }
}

public class Player
{
    private String name;
    private String pos;
    private Integer salary;
    private Integer number;

    public Player(String name, String pos, Integer salary, Integer number)
    {
        this.name = name;
        this.pos = pos;
        this.salary = salary;
        this.number = number;
    }

    public String getName() { return name; }
    public String getPos() { return pos; }
    public Integer getSalary() { return salary; }
    public Integer getNumber() { return number; }

    public void setName(String name) { this.name = name; }
    public void setPos(String pos) { this.pos = pos; }
    public void setSalary(Integer salary) { this.salary = salary; }
    public void setNumber(Integer number) { this.number = number; }
}

要回答您的问题,是的,您可以创建这些对象而无需向玩家填充List s。上面的SportsClub.main()说明了这一点。

答案 1 :(得分:2)

你可以在初始化时创建一个空的Branch[]数组(或者更好 - 一个列表)并在以后添加它,这样你就不必在创建时输入所有信息 - 同样适用于{{ 1}}。

类似的东西:

Player[]

答案 2 :(得分:2)

我会使用List而不是数组,因为它们(很容易)可以动态调整大小,但除此之外,你就是在正确的轨道上。

考虑封装和可见性。将所有这些字段设为私有并提供访问者。

答案 3 :(得分:2)

我觉得这很好。您可能应该在类中使用方法来管理您的信息 - 不要尝试从这些类的“外部”做任何严肃的事情。

更具体一点:你的所有成员都应该是私人的,只能在课程中使用/访问 - 一般都要避免使用setter和getter,而是要求班级为你做事。

例如,如果您想知道分支中有多少玩家,您可以调用branch.countPlayers,而不是访问Player数组来从外部对玩家进行计数。

如果你想知道团队中有多少玩家,你可以打电话给team.countPlayers,它们会为每个分支调用branch.countPlayers,总结它们并返回值。

如果您想查看玩家所在的分支,您可以调用Team.findPlayer(playerName)。团队会在每个分支上调用branch.hasPlayer(playerName),直到它返回true,然后Team会返回返回true的Branch对象。

请注意,这可以解决您的“已填充或未填充”问题。如果您只是使用“hasBranch()”,“addBranch()”,“removeBranch()”之类的方法,那么填充分支数组的方式和时间并不重要,因为您可以在Team类中控制它们,您可以更改它任何时候实施,而不是改变该类之外的一行。

答案 4 :(得分:0)

您不会 players数组中输入任何内容,也不会输入branch[]。如果您使字段可访问,具有属性,您将能够将它们放入您喜欢的位置。

类结构看起来不错,但是List会更好,所以你不必担心在未来重新调整数组的大小。

答案 5 :(得分:0)

你的班级没什么问题。我个人会使用强类型List来存储分支和玩家:

public class Team
{
  String clubName;
  String preName;
  List<Branch> branches;
}

public class Branch
{
  List<Player> players;

}

不确定要求,但您可能希望为每个Branch提供某种标识符或名称,对吗?

这些类中没有任何东西迫使你创建新的玩家只是为了实例化一个分支。 Players列表可以保留为空或空,直到您需要它们为止。