如何缩短Briefcase对应JLabel操作的switch case方法以减少重复代码?
优化重复switch-case的解决方案
这是个典型的重复代码优化场景,冗长的switch-case不仅难维护,看着也闹心!咱们可以用**映射表(Map)**来彻底解决这个问题,把数值和对应的JLabel直接关联,让代码简洁又好维护。
具体步骤:
初始化数值与JLabel的映射
在你的类中创建一个Map,把每个数值和view中对应的JLabel一一绑定。可以在构造方法或者类的初始化块里完成这个操作:private Map<Integer, JLabel> valueToLabelMap; public YourClassName() { valueToLabelMap = new HashMap<>(); // 逐个添加数值和对应的JLabel valueToLabelMap.put(1, view.getValue1()); valueToLabelMap.put(2, view.getValue2()); valueToLabelMap.put(5, view.getValue5()); valueToLabelMap.put(10, view.getValue10()); valueToLabelMap.put(25, view.getValue25()); // 继续补充剩下的21个数值对应的JLabel条目即可 }简化removeValueDisplay方法
现在不需要再写一堆case了,直接从Map里取出对应的JLabel,然后设置禁用状态就行:public void removeValueDisplay(Briefcase briefcase, int caseNum) { int targetValue = Model.briefcases[caseNum - 1].getValue(); JLabel targetLabel = valueToLabelMap.get(targetValue); // 加个空判断,避免出现空指针异常 if (targetLabel != null) { targetLabel.setEnabled(false); } }
为什么这么做更好?
- 维护成本低:以后新增或者修改数值对应的JLabel时,只需要在Map里增删条目,不用动业务逻辑代码
- 代码更简洁:去掉了大量重复的
setEnabled(false)和break语句,逻辑一目了然 - 扩展性强:如果后续需要对这些标签做其他统一操作(比如修改颜色),直接遍历Map就能批量处理
额外小提示:
如果你的view中获取JLabel的方法命名非常有规律(比如getValueX()里的X就是对应的数值),也可以尝试用反射来动态获取,但反射会带来一定的性能开销和可读性问题,所以更推荐用Map的方案,既稳妥又直观。
内容的提问来源于stack exchange,提问作者Caiz22
相关产品推荐
相关产品推荐

