为什么我的数组被覆盖java

Why is my array being overwritten java

本问题已经有最佳答案,请猛点这里访问。

我还在学习封装。我有一个GrammarList,其中每个Grammaremcapsuled都有一个数组listRule,其中包含所有的setter和getter。如这里所见:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Grammar {

private enum Type {Left, Right, NULL};
private String Nom;
private static Type type = null;
private static ArrayList<Rule> listRule;

public Grammar(String nom, Type type) {
    this.Nom = nom;
    this.type = type;
    this.listRule = new ArrayList<Rule>();
}
...
}

现在在我的程序中,我注意到每次添加新语法时,都会覆盖我的数组列表规则(其中添加了与语法相关联的规则)。我已经确定错误发生在Grammar grammar = new Grammar(parametre[0], null);行,该行清空了所有其他语法的listrule内容,因此listrule似乎对每个语法都是相同的。我的数组ListRule创建错误还是循环?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    try {
        while ((strLine = br.readLine()) != null) {
            String[] parametre = strLine.split(",");
            Grammar G = GrammarList.containsNom(parametre[0]);
            if (G == null) {
                Grammar grammar = new Grammar(parametre[0], null);
                grammarList.add(grammar);
                for (int i = 1; i < parametre.length; i++) {
                    SyntaxCheck check = new SyntaxCheck(parametre[i]);
                    if (check.isValid())
                        grammar.AddRule(check.Rule, check.Sens);
                }
            }
        }
    } catch (IOException e1) {
        e1.printStackTrace();
    }


您的listRule字段是static字段,这意味着每个实例共享同一对象。

删除static关键字:

1
private ArrayList<Rule> listRule; // not static