考虑这段代码
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
?
答案 0 :(得分:0)
请注意,setChildRules()
(可能)不会创建Set
引用的ruleSet
的副本。它只是复制(“记住”)对Set
的引用。如果您稍后修改 Set
(例如调用clear()
),那么所有的人都可以看到这个<{>> {{1} }}
似乎就像您希望Set
中的每个元素都拥有自己的parentChildrenList2
一样。因此,您实际上需要将Set
替换为ruleSet.clear()
(或您使用的任何类型)。