考虑这段代码

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

最佳答案

请注意,setChildRules()(可能)不会创建Set引用的ruleSet的副本。它只是复制(“记住”)对该Set的引用。如果您以后修改该Set(例如调用clear()),那么对每个引用该Set的人都将可见。

似乎您希望parentChildrenList2中的每个元素都有其自己的Set。因此,您实际上需要用ruleSet.clear()(或您使用的任何类型)替换ruleSet = new HashSet()

09-11 20:51