Правильное использование Java ruleSet - PullRequest
1 голос
/ 06 октября 2011

Учитывая этот кусок кода

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 голосов
/ 06 октября 2011

Обратите внимание, что setChildRules() (вероятно) не создает копию Set, на которую ссылается ruleSet. Он просто копирует («запоминает») ссылку на этот Set. Если позже вы измените , что Set (например, вызов clear()), тогда это будет видно каждому , у которого есть ссылка на этот Set.

Это кажется , как будто вы хотите, чтобы каждый элемент в parentChildrenList2 имел свой Set. Таким образом, вам необходимо заменить ruleSet.clear() на ruleSet = new HashSet() (или любой другой тип, который вы использовали).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...