java - 开关: duplicate case

标签 java duplicates switch-statement case

我正在尝试编写一种方法来过滤列表中的内容,并在 map 内确定标准。我在 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;
    }

最佳答案

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

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;
}

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

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

关于java - 开关: duplicate case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59355856/

相关文章:

sql - PostgreSQL 中使用多个条件的复杂重复数据删除

arrays - Matlab:删除数组中重复的连续值

javascript - 关于 JavaScript : how can i "reset" switch statement? 的问题

swift - 用于创建类实例或创建空变量的 If/Switch 语句

java - 为什么此照明代码仅适用于单个灯光,而当我添加多个灯光时会中断?

java - Eclipse 插件 : Passing command line arguments

grails - 使用命名数据源时,Grails多次测试加载 fixture 数据

java - 生成字符串按空格的所有组合

java - 如何使对象能够被垃圾回收?

PHP:默认情况切换中断?