Adding new objects to an ArrayList in constructor

旧街凉风 提交于 2020-11-28 02:54:27

问题


I am trying to add newly created objects to an ArrayList in the constructor of a class. The new objects are being created in another class in the main method.

Main method:

public static void main(String[] args) {
    // TODO code application logic here
    Player p1 = new Player("Peter");
}

My Player class:

public class Player {

protected static int age;
protected static String name;
protected static ArrayList players = new ArrayList();

Player(String aName) {
    
    name = aName;
    age = 15;
    players.add(new Player()); // i know this doesn't work but trying along these lines
    
   }
}

回答1:


You have to edit the line

players.add(new Player());

to

players.add(this);

Also, there is no need to make the age and name static

I suggest you should have the following code instead

import java.util.ArrayList;

public class Player {

protected int age;    //static is removed
protected String name;  // static is removed
protected static ArrayList<Player> players = new ArrayList<Player>();  //this is not a best practice to have a list of player inside player.

Player(String aName) {

    name = aName;
    age = 15;
    players.add(this); // i know this doesn't work but trying along these lines

   }


public static void main(String[] args) {
    // TODO code application logic here
    Player p1 = new Player("Peter");
}


}



回答2:


It sounds like you're actually asking how to refer to the instance you're constructing.
That's what the this keyword does.




回答3:


This post is old, but for someone with similiar needs I suggest doing it like this:

Main class:

public static void main(String[] args) {
    //TODO code application logic here
    java.util.List<Player> players = new java.util.ArrayList<>(); //list to hold all players
    Player p1 = new Player("Peter"); //test player
    players.add(p1); //adding test player to the list
    players.add(new Player("Peter")); //also possible in this case to add test player without creating variable for it.
}

Player class:

public class Player {

    private final int age = 15; //if you always going to use 15 as a age like in your case it could be final. if not then pass it to constructor and initialize the same way as the name.
    private String name;

    Player(String name) { //variable name can be the same as one in class, just add this prefix to indicated you are talking about the one which is global class variable.
        this.name = name;
    }

}

Generally you should avoid using static keyword on variables which supposed to be different in each instance of that class. Avoid having object of itself inside.



来源:https://stackoverflow.com/questions/19456860/adding-new-objects-to-an-arraylist-in-constructor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!