簡體   English   中英

對象初始化(Java)

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

我對此很陌生,因此,任何幫助,例如實現此目的的替代方法(不使用數組)都將不勝感激! 謝謝。

您應該了解TeamPlayer之間的關系。

在您當前的實現中,一個Team有兩個Player ,我將初始化移到構造函數中:

public class Team {

    private Player player1;
    private Player player2;

    public Team(Player player1, Player player2) {
        this.player1 = player1; 
        this.player1 = player2;   
    }
}

player1player2的初始化應在某些驅動程序中完成,該類應負責初始化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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM