对象初始化 (Java)
Object initialization (Java)
假设您有一个 class 团队:
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();
}
}
}
另一个class叫玩家:
public class Player {
private String name;
public void setName(String inputName) {
name = inputName;
}
public String getName() {
return name;
}
}
如果我想为 player1 设置名称,我可以通过调用 Team() 方法来实现。但是如果我想为 player2 设置一个名称,它会重置 player1 的名称,因为每次调用该方法时它都会创建一个新的 player1 和 player2 对象,对吗?
所以我的问题是,如果我只想在第一次 运行 Team() 方法时初始化 player1 和 player2 对象,我该如何实现?因为如果我将对象初始化移出团队 class,我将无法访问 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
的初始化应该在某个driver中完成,一个class应该负责初始化Player
s 并将它们设置为一个团队。
Setting/getting玩家的名字应该写在Player
class,而不是Team
class,因为Team
是只对团队负责,不对Player
细节负责。
我会更改 Team
class 以包含 X Player
而不仅仅是 2 个,将来扩展这个 class 会更容易。
重要说明:使用 equals
比较字符串,==
比较引用而不是字符串的内容。
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()));
}
通过这种方式,您可以为读入的每个名称添加任意数量的玩家。
假设您有一个 class 团队:
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();
}
}
}
另一个class叫玩家:
public class Player {
private String name;
public void setName(String inputName) {
name = inputName;
}
public String getName() {
return name;
}
}
如果我想为 player1 设置名称,我可以通过调用 Team() 方法来实现。但是如果我想为 player2 设置一个名称,它会重置 player1 的名称,因为每次调用该方法时它都会创建一个新的 player1 和 player2 对象,对吗?
所以我的问题是,如果我只想在第一次 运行 Team() 方法时初始化 player1 和 player2 对象,我该如何实现?因为如果我将对象初始化移出团队 class,我将无法访问 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
的初始化应该在某个driver中完成,一个class应该负责初始化Player
s 并将它们设置为一个团队。
Setting/getting玩家的名字应该写在Player
class,而不是Team
class,因为Team
是只对团队负责,不对Player
细节负责。
我会更改 Team
class 以包含 X Player
而不仅仅是 2 个,将来扩展这个 class 会更容易。
重要说明:使用 equals
比较字符串,==
比较引用而不是字符串的内容。
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()));
}
通过这种方式,您可以为读入的每个名称添加任意数量的玩家。