当前位置: 首页 > 知识库问答 >
问题:

设计方法为多个如果否则语句?

曹浩淼
2023-03-14

我有一个以字符串形式返回sql查询的方法。此方法考虑参数“level”,基于此参数有多个if-else语句,如

   if(level.equals("A1")){
    // add some  field in query
   }
   else if (level.equals("A2"))
   {
    // add some  field  and logic in query
   }
   ..

   so on 

将来的级别数量会增加,我不想写讨厌的 if else 语句,所以我正在寻找适用于这种情况的更清洁且可维护的设计方法。我正在考虑策略设计模式,但不确定它是否最适合这种情况。

共有2个答案

齐英耀
2023-03-14

您可以使用枚举列出操作,并使用valueOf确定要使用的操作。

enum Levels {
    A1 {
        @Override
        void doSomethingToTheQuery(Query q) {
            // add some  field in query
        }
    },
    A2{
        @Override
        void doSomethingToTheQuery(Query q) {
            // add some  field  and logic in query
        }
    };

    abstract void doSomethingToTheQuery(Query q);
}

public void test() {
    // Lookup the level and do hack the query.
    Levels.valueOf("A1").doSomethingToTheQuery(q);
}

然后,只需添加到枚举,就可以添加新的级别。

慕嘉茂
2023-03-14

您有几种选择:

> 如果

  • /否则,如果如您所指出的。

    开关语句。

    键是级别字符串,值是功能接口类型引用(Runnable或来自java.util.function的适当接口,或您自己的接口)的Map,您可以根据需要使用方法引用、lambda、匿名类实例甚至具体类实例进行初始化。

    下面是最后一个选项的示例,使用最基本的函数接口Runnable,并使用方法引用:

    import java.util.Map;
    import java.util.HashMap;
    
    public class Example {
        private Map<String, Runnable> handlers;
    
        public Example() {
            this.handlers = new HashMap<String, Runnable>();
            this.handlers.put("A1", this::a1action);
            this.handlers.put("A2", this::a2action);
        }
    
        private void a1action() {
            System.out.println("Action A1");
        }
    
        private void a2action() {
            System.out.println("Action A2");
        }
    
        public void handleAction(String action) {
            Runnable handler = this.handlers.get(action);
            if (handler == null) {
                System.out.println("No handler for '" + action + "'");
            } else {
                handler.run();
            }
        }
    
        public static void main(String[] args) throws Exception {
            Example ex = new Example();
            ex.handleAction("A1");
            ex.handleAction("A2");
            ex.handleAction("A3");
        }
    }
    

  •  类似资料:
    • 问题内容: 我最近发现了简写if语句,并且在网上搜索后找不到明确的答案。 如果条件为真/假,是否可以执行2条语句? 例如 看到我没有碰到他们使用它的示例,我想这是不可能的,但我不想错过 问题答案: 您正在谈论条件分配。您应该查看所编写的内容所定义的内容: 那就是在评估“表达式”,如果是,则执行“ 1 AND 2”,然后将值赋给x。如果将“表达式”评估为假,则将评估“ 3”并将其分配给x。因此,您绝

    • 假设我有一个类似下面的函数checkTime,我必须同时检查多个条件。 (上述示例是假设的) 我使用的函数完全有效,但是: 有没有更好的方法、程序或公式来取代这一点?(不必如此冗长或丑陋) Thanx!

    • 问题内容: 使用Sql Server2012。我有一个存储过程,它的一部分检查用户名是否在表中。如果是,则返回1,否则返回2。这是我的代码: 但是,我一直收到以下错误: ‘1’附近的语法不正确。 使用IF EXIST甚至可以做到吗? 问候 问题答案: 如果您想这样做,那么这就是您要遵循的语法。 您不一定严格要求这些语句,但是最好是从一开始就养成这种习惯。

    • 我对Java很陌生,我正在努力学习。我写了少量的代码,但结果并不是我所期望的。看起来,无论我将体重设置为什么,它都不会显示“你的脂肪”上方的打印。我错过了什么? 我希望这段代码能够顺序检查每个else语句给出的int值,并打印出与int值相等的行。

    • 在聚焦到具体的语法规则内部结构之前,我们要先讨论下语法的整体剖析以及如何形成一套初始的语法骨架。 文法文件通常是由一个命名文法的头和一系列可以彼此调用的规则组成。就像下面的那样: grammar MyG; rule1 : «stuff» ; rule2 : «more stuff» ; ... 设计语法就是要搞清楚«stuff»是什么?哪个规则是开始规则。这要求我们需要知道给定语言的一系列代表性

    • 问题内容: 我需要以等于1K或1K,1.1K,1.2K,1.9K等的1K格式显示货币值,如果不是偶数,则为1000,否则显示正常的500、100、250等,使用javascript格式化数字? 问题答案: 听起来这应该适合您: