【问题标题】:Switch: duplicate case [duplicate]开关:重复大小写[重复]
【发布时间】:2019-12-16 11:36:54
【问题描述】:

我正在尝试编写一种方法来过滤列表中的内容,并在 Map 中确定标准。我在地图上写了一个循环,每次检查是否应该将列表元素添加到新列表中。 我的问题是:在 switch 语句中,第一个和最后一个案例被视为重复。这是我的 IDE 的问题吗? 非常感谢您的帮助!

    @Override
    public boolean match(Person p, Map<String, Object> criteria,SearchMode mode) {
        for(Entry<String,Object> es:criteria.entrySet()) {
            Object value=es.getValue();

            switch(es.getKey()) {
                case ID:        
                    if(mode==SearchMode.AND && !Integer.valueOf(p.getId()).equals((Integer)value)) {
                        return false;
                    }else if (mode==SearchMode.OR && Integer.valueOf(p.getId()).equals((Integer)value)) {
                        return true;
                    }
                    break;
                case USER_NAME:
                    if(mode==SearchMode.AND && !p.getUserName().equals(value)) {
                        return false;
                    } else if(mode==SearchMode.OR && p.getUserName().equals(value)) {
                        return true;
                    }
                    break;
                case EMAIL:
                    if(mode==SearchMode.AND && !p.getEmail().equals(value)) {
                        return false;
                    }else if(mode==SearchMode.OR && p.getEmail().equals(value)) {
                        return true;
                    }
                    break;
                case PASSWORD:
                    if(mode==SearchMode.AND && !p.getPassword().equals(value)) {
                        return false;
                    } else if(mode==SearchMode.OR && p.getPassword().equals(value)) {
                        return true;
                    }
                    break;
                case FIRST_NAME:
                    if(mode==SearchMode.AND && !p.getFirstName().equals(value)) {
                        return false;
                    } else if(mode==SearchMode.OR && p.getFirstName().equals(value)) {
                        return true;
                    }
                    break;
                case LAST_NAME:
                    if(mode==SearchMode.AND && !p.getLastName().equals(value)) {
                        return false;
                    }else if(mode==SearchMode.OR && p.getLastName().equals(value)) {
                        return true;
                    }
                    break;
                case STATUS:
                    if(mode==SearchMode.AND && !p.getStatus().equals((Person.Status.valueOf(value.toString())))){
                        return false;
                    }else if(mode==SearchMode.OR && !p.getStatus().equals((Person.Status.valueOf(value.toString())))){
                        return true;
                    }
                    break;
            }
        }
        return true;
    }

【问题讨论】:

  • 您必须已定义常量 ID 和 STATUS。我认为这些常量的值是相同的
  • ID 和 STATUS 不一样。奇怪的是,红色下划线随着我减少案例数量而出现......

标签: java duplicates switch-statement case


【解决方案1】:

如果两种情况下的业务逻辑相同,则可以更改:

switch(type) {
 case CASE_1: performA(); break;
 case CASE_2: performB(); break;
 case CASE_3: performA(); break;
}

显然 CASE_1 和 CASE_3 执行相同的代码,使用瀑布原理:

switch(type) {
  case CASE_1: // no break statement here
  case CASE_3: performA(); break;
  case CASE_2: performB(); break;
}

从功能的角度来看,这是一样的,只是你不必担心重复的代码。

但是,保持原样并没有什么坏处,除非您以后必须更新它,而忘记同时更新它。

【讨论】:

  • 我终于通过使用枚举而不是静态最终属性解决了这个问题。似乎有效,这次不管他们有多少。
猜你喜欢
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 2016-05-03
  • 2016-01-21
  • 1970-01-01
相关资源
最近更新 更多