遞歸引用調用注意事項

代碼1:

   public void addParentAccount(Integer userId, Account account,Set<Account> set) {
        AccountingSubClass accountingSubClassQuery = new AccountingSubClass();
        accountingSubClassQuery.setClassCode(account.getAccountingSubClassCode());
        AccountingSubClass accountingSubClass = accountingSubClassMapper.selectOne(accountingSubClassQuery);
//        set=new HashSet<Account>();
        if (accountingSubClass != null &&
                StringUtils.isNotEmpty(accountingSubClass.getParentCode())) {
            AccountingSubClass accountingSubClassParent = getAccountingSubClass(Integer.parseInt(accountingSubClass.getParentCode()));
            if (accountingSubClassParent != null) {
                if (checkAccountIsExits(userId, account.getAccountCode(),
                        accountingSubClassParent.getClassCode(), account.getBusinessCode()) == null) {
                    set.add(getAccount(userId, account.getAccountClassCode(),
                            accountingSubClassParent.getClassCode(), account.getBusinessCode()));
                    Account accountTmp = new Account();
                    BeanUtils.copyProperties(account, accountTmp);
                    accountTmp.setAccountingSubClassCode(accountingSubClassParent.getClassCode());
                    addParentAccount(userId, accountTmp,set);
                }
            }

        }

 

代碼2:

public void addParentAccount(Integer userId, Account account,Set<Account> set) { AccountingSubClass accountingSubClassQuery = new AccountingSubClass(); accountingSubClassQuery.setClassCode(account.getAccountingSubClassCode()); AccountingSubClass accountingSubClass = accountingSubClassMapper.selectOne(accountingSubClassQuery); // set=new HashSet<Account>(); if (accountingSubClass != null && StringUtils.isNotEmpty(accountingSubClass.getParentCode())) { AccountingSubClass accountingSubClassParent = getAccountingSubClass(Integer.parseInt(accountingSubClass.getParentCode())); if (accountingSubClassParent != null) { if (checkAccountIsExits(userId, account.getAccountCode(), accountingSubClassParent.getClassCode(), account.getBusinessCode()) == null) { set.add(getAccount(userId, account.getAccountClassCode(), accountingSubClassParent.getClassCode(), account.getBusinessCode()));   account.setAccountingSubClassCode(accountingSubClassParent.getClassCode()); addParentAccount(userId, account,set); } } }

 

代碼1set是正確的結果

代碼2 set會出現所有數據都一樣的集合

由於Account account參數是引用類型調用,當你改變account屬性的時候,set集合裏相應的對象也會跟着改變。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章