ArrayList在class中初始化,其值在方法中设置(仅在该方法中存在)
我该如何防止数组列表为空,或者为什么会发生这种情况?
(编辑:我已将此次要项目添加到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
}
您在Creature类中定义了2个构造函数。在第二个ctor中,您使用新的运算符呼叫第一个ctor
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中调用另一个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]);
}
//...
}