[英]Object initialization (Java)
假设您有一个名为“团队”的课程:
public class Team {
public void Team() {
Player player1 = new Player();
Player player2 = new Player();
if (player1.getName == "") {
player1.setName = console.next();
}
else if (player2.getName == "") {
player2.setName = console.next();
}
}
}
还有另一个叫玩家的类:
public class Player {
private String name;
public void setName(String inputName) {
name = inputName;
}
public String getName() {
return name;
}
}
如果我想为player1设置名称,可以通过调用Team()方法来设置。 但是,如果我随后想为player2设置一个名称,它将重置玩家1的名称,因为每次调用该方法时都会创建一个新的player1和player2对象,对吗?
所以我的问题是,如果我只想在第一次运行Team()方法时仅初始化player1和player2对象,我将如何实现? 因为如果将对象初始化移出Team类,则将无法访问getName和setName。
我对此很陌生,因此,任何帮助,例如实现此目的的替代方法(不使用数组)都将不胜感激! 谢谢。
您应该了解Team
和Player
之间的关系。
在您当前的实现中,一个Team
有两个Player
,我将初始化移到构造函数中:
public class Team {
private Player player1;
private Player player2;
public Team(Player player1, Player player2) {
this.player1 = player1;
this.player1 = player2;
}
}
player1
和player2
的初始化应在某些驱动程序中完成,该类应负责初始化Player
并将它们设置为团队。
设置/获取玩家的名字应该在Player
类中进行,而不是在Team
类中进行,因为Team
仅对Team
负责,而不对Player
的详细信息负责。
我将Team
类更改为包含X Player
,而不仅仅是2个,将来扩展该类会更容易。
重要说明:使用equals
比较字符串, ==
比较引用而不是String的内容。
public class Team {
Player player1, player2;
public void Team() {
player1 = new Player();
player2 = new Player();
}
public void Team(Player p1, Player p2) {
player1 = p1;
player2 = p2;
}
public void setPlayer1(String name) {
if (!name.isEmpty()) {
player1.setName = name;
}
}
public void setPlayer2(String name) {
if (!name.isEmpty()) {
player2.setName = name;
}
}
public String getPlayer1Name() {
get player1.getName();
}
public String getPlayer2Name() {
get player2.getName();
}
然后做类似的事情
Team team = new Team();
team.setPlayer1("john");
team.setPlayer2("jane");
要么
Team team = new Team("john", "jane");
这就是您正确编写代码的方式,
如果您假设一个团队可以有任意数量的玩家,并且通过添加玩家来建立一个团队,则可以这样编写。
public class Team {
private final List<Player> players = new ArrayList<>();
public void add(Player player) { players.add(player); }
}
public class Player {
final String name;
public Player(String name) { this.name = name; }
public String getName() { return name; }
}
// in your main or another method.
Team team = new Team();
while(/* more players */) {
team.add(new Player(console.next()));
}
这样,您可以为读入的每个名字添加任意数量的玩家。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.