多入口的全局变量

来源:互联网 发布:ubuntu备份文件 编辑:程序博客网 时间:2024/05/06 20:27

    全局变量在很多时候,会给我们带来便利。可用的不好,就是bug之源。

    尤其是多入口的全局变量,简直就是炸弹。

    这里说的多入口的全局变量,是指java类中的成员变量。“多入口”是指,这个变量会在诸多地方被赋值,被调用。

    我的bug场景如图:

   在电路标签打印的类里,有一个private CircuitLabelBean circuitLabelBean。CircuitLabelBean封装电路编号,端口号,业务代号,报障电话的属性。

   点击上图中的查询,会根据业务代号查询电路标签信息,circuitLabelBean会被赋值,然后填充到页面上。点击打印后,会根据给定的接口,打印到连接的蓝牙打印机上。

   我在打印之前,会给circuitLabelBean重新赋值,因为要加上“业务代号:”,“保障电话:”之类信息。其中有个例外,页面显示“电路编码:...",可打印出来的效果是“编码:...“。

于是每次打印前我这么处理:circuitLabelBean.setCircuit_no("编码:"+circuitLabelBean.getCircuit_no())。

   大家可以看到,circuitLabelBean的各个属性的入口很多。在查询时,会被赋值。在打印前,会被按规则处理赋值。我那么处理,在第一次打印时,打印完好。可再打印时,打印出来的”编码:"会递增,每次会多出一个,可其他的比如“业务代号”之类的打印就没问题。隐藏的太隐蔽了。第一时间真没想到什么原因。等到发现问题时,是全局变量入口的错。

    血泪的教训:多入口的全局变量,请谨慎检查