正确使用Java ruleSet

时间:2011-10-06 07:12:29

标签: java for-loop

考虑这段代码

for (MyRule cr : crList) {    
  if (crIds.contains(cr.getParentId())) {
    ruleSet.add(cr);

    for (int cursor = 0; cursor < parentChildrenList.size(); cursor++) {
      if (parentChildrenList.get(cursor).getId().equals(cr.getParentId())) {
        parentChildrenList2.get(cursor).setChildRules(ruleSet);
        parentChildrenList2.remove(cursor + 1);
      }
    }
  }
  ruleSet.clear();
}

当我执行ruleSet.clear()时,我也失去了之前在parentChildrenList2.get(cursor).setChildRules(ruleSet);中设置的值

如何在停止ruleSet

的同时停止丢失

1 个答案:

答案 0 :(得分:0)

请注意,setChildRules()(可能)不会创建Set引用的ruleSet的副本。它只是复制(“记住”)对Set的引用。如果您稍后修改 Set(例如调用clear()),那么所有的人都可以看到这个<{>> {{1} }}

似乎就像您希望Set中的每个元素都拥有自己的parentChildrenList2 一样。因此,您实际上需要将Set替换为ruleSet.clear()(或您使用的任何类型)。