ArrayList在Java中的其他方法中为空

时间:2015-12-13 22:46:13

标签: java arraylist

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 
}

1 个答案:

答案 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]);
    }
    //...
}