递归引用调用注意事项

代码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集合里相应的对象也会跟着改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值