在开始构建应用程序时,我开始使用仅考虑五种情况的 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/