java - 如何实现可扩展的 switch case block ?

标签 java switch-statement conditional-statements

在开始构建应用程序时,我开始使用仅考虑五种情况的 switch case block 。后来,随着构建的进展,更多的案例出现了,这开始产生问题。我知道我一开始可能就设计错误了,但如果发生这样的变化,我该如何有效地解决这个问题?下面给出一个例子

从这里开始

switch case 1: /*do function1()*/ break;
       case 2: /*do function2()*/ break;

后来,有 100 个案例进来

switch case 1: /*do function1()*/ break;
       case 2: /*do function2()*/ break;
       ....
       case 100: /*do function100()*/ break;

我确信将这些情况转换为 100 个 if 条件并不是一个很好的方法,那么有没有办法可以做到这一点?

请考虑上面代码中给出的函数目前只是简单的数学函数。

最佳答案

考虑这样的界面:

public interface MyFunction {
    public void compute();
}

和一个 Map,其中之前的接口(interface)作为值:

Map<Integer,MyFunction> myFunctionsMap = new HashMap<>();

您需要使用所有功能初始化 map :

myFunctionsMap.put(1,new MyFuntion() {
    @Override
    public void compute() {
        /*do function1()*/
    }
});

对于每个函数,匿名类的语法可能有点重,您可以在单独的类中实现函数并使用它们。

现在您只需使用 map 即可代替开关:

myFunctionsMap.get(theValueSwitched).execute();

根据您初始化映射的方式、键的值以及您如何使用它,您可能需要检查 myFunctionsMap.contains(theValueSwitched) (如果您有一)。

编辑:Java 8 较短的语法为 myFunctionsMap.put(1,() -> {/*do function1()*/});

关于java - 如何实现可扩展的 switch case block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24053601/

相关文章:

Java Date/Calendar 对象字符串,比较

java - 在 Java Swing 中打印发票和类似文档的工具是什么?

java - Jboss 7.1部署war web应用时如何配置jndi引用名workmanger和timer

java - 将数组与 Switch 语句一起使用时需要常量表达式

php - 使用数组键和数组值的 switch 语句?

javascript - React - 条件 JSX 渲染

java - While 循环在音频播放器中不起作用

java - 如何更改 Codename 1 中 Google Maps api 中路径的样式

Android - 隐藏开关小部件上的标签

c++ - 避免在 C++ 中的循环中的每一步都检查相同的条件