[英]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.