You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何缩短Briefcase对应JLabel操作的switch case方法以减少重复代码?

优化重复switch-case的解决方案

这是个典型的重复代码优化场景,冗长的switch-case不仅难维护,看着也闹心!咱们可以用**映射表(Map)**来彻底解决这个问题,把数值和对应的JLabel直接关联,让代码简洁又好维护。

具体步骤:

  1. 初始化数值与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条目即可
    }
    
  2. 简化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:07:04