Java 具有相同控制表达式但不同case实现的Switch语句

Java 具有相同控制表达式但不同case实现的Switch语句,java,switch-statement,Java,Switch Statement,我有两个switch语句,它们在结构上是相同的,但它们的作用不同。我怎么可能把它们结合起来呢?或者有没有更好的设计建议而不是使用两个switch语句 这是第一个switch语句的外观: switch(var){ case 1: functionA(); break; case 2: functionB(); break; } 第二个是这样的: switch(var){ case 1: functionC(); break; ca

我有两个switch语句,它们在结构上是相同的,但它们的作用不同。我怎么可能把它们结合起来呢?或者有没有更好的设计建议而不是使用两个switch语句

这是第一个switch语句的外观:

switch(var){
   case 1:
    functionA();
   break;
   case 2:
    functionB();
   break;
}
第二个是这样的:

switch(var){
   case 1:
    functionC();
   break;
   case 2:
    functionD();
   break;
}
private Consumer<Integer> createConsumer(Runnable... actions) {
    return i -> {
        if (actions.length < i)
            throw new IllegalArgumentException();
        actions[i].run();
    };
}
问题是,
function()
不能与
functionC()
同时调用,
functionB()
functionD()
也不能同时调用-它们将在不同的时间调用

如果这听起来很愚蠢,请原谅我,但是有没有办法在不同的情况下重复使用一个switch语句


注意:这不是一个“我如何做到这一点?”的问题,而是一个“我如何做到这一点”的问题。

在我的optionion中,没有必要进一步简化您的switch语句,因为它们是可读的,可以做不同的事情。另外,为了简化,您需要添加额外的抽象层,这在这里是不可能的

这里唯一可以抽象的是
var
参数。虽然我不推荐,但也许你可以试试这样的东西:

switch(var){
   case 1:
    functionC();
   break;
   case 2:
    functionD();
   break;
}
private Consumer<Integer> createConsumer(Runnable... actions) {
    return i -> {
        if (actions.length < i)
            throw new IllegalArgumentException();
        actions[i].run();
    };
}
然后像这样执行它

consumer.accept(0);
如果您还需要一个默认语句
Consumer createConsumer(Runnable…actions,Runnable defaultOption)
来拯救,那么
IllegalArgumentException
也将是多余的


然而,这只是
switch
语句的某种功能样式,这可能会使事情变得更加复杂,只要参数不是从0开始,而是从其他数字开始(您需要减法到0),或者如果您的开关块有两个数字(0,1,3,…)之间的“间隙”。

1。多了解一些情况会有所帮助。2.如果这是一个“我如何做得更好”的问题,可能会更合适,除非您在单独的线程中调用它们一个简单的
function();函数c()
不会同时运行这两个方法,而是在彼此之后运行。所以我真的不明白你的问题是什么。@Oh,不同的switch语句实际上是在不同的时间和不同的方法中使用的。我想“理论上”只使用一个开关statement@FedericoklezCulloca由于这个问题是假设性质的,所以在代码评审时会收到不好的回答。@MathiasEttinger我会在这里保留一段时间,也许有人会理解。。。看来反对党的军队已经到了这里。我真的不认为这是假设,但嘿……也许有一个开关语句的“构造函数”,我没听说过哈哈