ArrayList在Class中初始化,其值在方法中设置(仅在此方法中存在)
我怎样才能防止arraylist出现空洞或为什么会发生这种情况?
(编辑:我将这个小项目添加到github(https://github.com/goodstuff20/NENAM))
List<Node> nodes = new ArrayList<Node>();
public Creature(Node[] nodes){
for(int i = 0; i < nodes.length; i++) {
this.nodes.add(nodes[i]);
}
System.out.println(this.nodes.size()); //4
}
public void tick(){
System.out.println(nodes.size()); //0
}
答案 0 :(得分:0)
您已在类Creature中定义了2个构造函数。在第二个ctor中,您使用new-operator打电话给第一个:
public Creature(Node[] nodes){
//....
for(int i = 0; i < nodes.length; i++){
nodess.add(nodes[i]);
}
//....
}
public Creature(int[][] nodePos, int[][] musclePos){
//...
Node[] nodes = new Node[nodePos.length];
//...
new Creature(nodes);
}
也许您打算通过调用另一个ctor来更改当前创建的对象,而是创建一个与第一个无关的新对象。
要在同一个对象上调用另一个ctor,你必须使用this
,但这必须在第一行完成。
例如:
public Creature(int[][] nodePos, int[][] musclePos){
this(...);
}
出于您的目的,最好使用init方法:
public Creature(Node[] nodes){
init(nodes);
}
public Creature(int[][] nodePos, int[][] musclePos){
//...
Node[] nodes = new Node[nodePos.length]; //when defineing an int length = normal and not -1
//...
init(nodes);
}
private void init(Node[] nodes) {
//...
for(int i = 0; i < nodes.length; i++){
nodess.add(nodes[i]);
}
//...
}