значение списка изменяется с помощью рекурсии при использовании этого - PullRequest
0 голосов
/ 01 марта 2019

Я выполняю рекурсию, как показано в комментарии ниже, используя строку callee.getExtendedCallees(requirement);Я также добавляю текущий объект метода, который рассматриваю, в строке VisitedCallees.add(this);, потому что я не хочу выполнять свою рекурсию для объекта, который уже был посещен.Давайте рассмотрим, что значение «this» равно 16 до применения рекурсии, поэтому VisitedCalleed содержит 16 до применения рекурсии.Проблема заключается в том, что после применения рекурсии содержимое списка VisitedCallees изменяется автоматически и больше не содержит метод 16, но теперь содержит новый метод, к которому была применена рекурсия (callee-новое значение «this»), который имеет идентификатор15 в этом случае.Таким образом, VisitedCallees больше не содержит 16, а содержит 15 после применения рекурсии, что означает, что я больше не могу входить в оператор if.Я хочу, чтобы VisitedCallees содержал 16 даже после рекурсии, и я не хочу, чтобы содержимое VisitedCallees автоматически изменялось.Как я могу избежать этого и не допустить этого?

 public MethodList getExtendedCallees(Requirement requirement) throws 
 CloneNotSupportedException {

    if(this.FirstTimeCallees==false && !VisitedCallees.contains(this) && AlgoFinal.RecursiveDescent==true) {

        //ADD VISITED CALLEES
        VisitedCallees.add(this); 

        MethodList childrenCallees= new MethodList(); 
        for(Method callee: this.Callees) {
            if(!callee.Owner.ID.equals(this.Owner.ID)) {
                ExtendedCallees.add(callee); 
            }else {
                //RECURSION 
                callee.getExtendedCallees(requirement);                         
            }
        }
        this.FirstTimeCallees=true; 
        ExtendedCallees=RemoveDuplicates(ExtendedCallees); 
    }
}
...