我仍在学习封装。我有一个语法列表
,其中每个语法
emcapsulated都有一个数组列表规则
,以及它们的所有设置程序
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>();
}
...
}
现在在我的程序中,我注意到数组listRule(其中添加了与语法相关的规则)在每次添加新语法时都会被覆盖。我已经能够识别出错误发生在Grammar=new Grammar(参数[0],null)这一行上
会清空listRule中所有其他语法的内容,因此listRule似乎对所有语法都是一样的。我的数组listRule创建不正确还是我的循环?
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();
}
您的列表规则
字段是静态
,这意味着每个实例共享同一个对象。
删除静态
关键字:
private ArrayList<Rule> listRule; // not static
问题内容: 这让我发疯!我看了一些关于Stackoverflow的问题,发现ID元素的优先级高于类元素(这很高兴知道,但是我感觉这不是我的问题)。这是我苦苦挣扎的NAVIGATION菜单。(我使用最大宽度顺便说一句) 这是我的资产净值的一般CSS: 现在,当视口小于1140px时,我希望CSS更改菜单,如下所示: 因此,基本上,菜单将以较少的顶部填充向左浮动。 当视口小于800像素时,我希望CSS
问题内容: 好的,我从很多地方和来源都听说过,每当我覆盖equals()方法时,我也需要覆盖hashCode()方法。但是请考虑以下代码 这里的输出为true,完全按照我想要的方式为false,我根本不关心重写hashCode()方法。这意味着hashCode()覆盖是一种选择,而不是每个人都说的强制性选择。 我想要第二次确认。 问题答案: 它对您有用,因为您的代码未使用任何需要API的功能(Ha
问题内容: 我创建了一个将列表作为参数的函数。它会随机排列列表,替换第一个元素,然后返回新列表。 改组对我的问题没有影响。但是,我很惊讶地看到返回的importedList覆盖了原始的firstList。 通过在函数中复制列表,我找到了一种解决方法,但是效率似乎很低。 我的问题是为什么该函数替换firstList?例如,如果是字符串,则不会发生这种情况。 问题答案: 字符串,整数,元组是不可变的p
以下代码是康威在终端中的生活游戏。我想在这里做的是将当前步骤覆盖到下一步。我有一个临时的2D数组在动画()方法。同样在主方法中,我打印了三次动画变化(),这就是我想要改变的。基本上,我想覆盖董事会,而不是打印三次,因为视觉上它相当丑陋,而循环。
我只需要我测试对象获得新的数据,但是在异步函数中重写它之后,它仍然是旧的
问题内容: 对于在要克隆对象的类中重写克隆方法,我感到困惑。 对象类具有 受保护的对象 方法,并且按照受保护的行为,即 当方法受到保护时,只能由类本身,该类的子类或与该类位于同一包中的类访问 。 由于Java中的每个类都从Object扩展而来,因此它应该具有clone方法,但仍然被迫重写clone。为什么需要它? 另外,我在某些地方已经阅读了有关覆盖克隆对象并将其公开的信息。我不知道为什么会这样吗