考虑这段代码
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()
。