Java 具有相同控制表达式但不同case实现的Switch语句
我有两个switch语句,它们在结构上是相同的,但它们的作用不同。我怎么可能把它们结合起来呢?或者有没有更好的设计建议而不是使用两个switch语句 这是第一个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(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我会在这里保留一段时间,也许有人会理解。。。看来反对党的军队已经到了这里。我真的不认为这是假设,但嘿……也许有一个开关语句的“构造函数”,我没听说过哈哈