BUG总结——【构造函数写逻辑】引发的极大的线上问题

刚才排查出一个线上问题,极为严重,但是引发点却非常小,让人深省。

构造函数不写逻辑 这句话一直说,但是一直不理解原因,也确实没遇到过有问题的代码。但是今天却实实在在被坑了一大把,还是很长记性的,在这里记一下,以后警觉。


首先最开始我们的代码是这样的:

        Repayment vo = new Repayment();
	vo.setId(withholdvo.getRepaymentId());
	vo.setStatus(0);
	withholdService.updateRepayment(vo);

在这里是我写的代码,原意是更新一个Repayment的status。

一直运行也是正常的,但是后来我们同事加了句这样的代码:

public Repayment(){
	amount = BigDecimal.ZERO;
	amountPaid = BigDecimal.ZERO;
	capital = BigDecimal.ZERO;
}

然后,可怕的事情就发生了,在更新的时候,把原有的Repayment里应有的数据全都更新成了0。

这样就很严重了,改了一大堆的数据才修复,而且当时这个Bug不好找,找了好久才发现。

这种的操作还是应该在init方法执行,或者说可以有一个带参数的构造函数来处理。

猜你喜欢

转载自blog.csdn.net/doujinlong1/article/details/80807041