我想用Java创建一个通用的switch case语句。我正在制作一个程序,在某些时候我必须为switch语句创建32个不同的情况,例如:case 0 : , case 1 : , .... case 31 :
。然后在每种情况下我都要编写一些代码行。有没有办法实现一般的switch case语句,这样我就不必编写32个单独的case?
例如:
switch(n){
case k :
.....
{
我怎样才能在java中实现它?可能吗?
为什么不使用default
分支:
switch (n) {
// cases for which you need custom behavior...
default:
// use n for the general case
}
你可以使用枚举。例如,这是一个枚举,它将数字的名称与其整数值进行匹配:
enum MyDigit
{
ZERO(0),
ONE(1),
TWO(2),
// etc
NINE(9);
private final int intValue;
MyDigit(int intValue)
{
this.intValue = intValue;
}
public int intValue()
{
return intValue;
}
}
枚举非常灵活。例如,您还可以构建所有值的反向映射,并使用静态查找方法来获取枚举的所需值。
(是的,有些人会说整数值在这里是多余的,因为我可以使用values()
/ ordinal()
,但这只是为了说明)
当你看到32个案例的switch语句和一个可能经常需要增强的案例时,它通常会发出code or design "smell"的信号。您可能需要在代码的多个位置复制此交换机结构,然后您将以高维护成本和违反Open/closed Principle和Single Responsibility Principle的脆弱代码结束(因为需求中的单个更改可能会迫使您有机会代码在多个位置)。
解决此问题的方法是将代码分解为多个类以利用polymorphism。当你进行分解时,你必须考虑Design Pattern将为你提供最合适的switch语句替换。一些潜在的候选人(因为我不知道你的代码的性质)是:Command,Strategy,Visitor;但也有其他人。
在每种情况下,我必须写2行,它们的变量取决于案例...所以在案例0,我将要使用的变量是0 * L(l是我想要的值的变量,首先是L = 8)...然后情况1是1 * L ...情况2:2 * L,依此类推
好吧,检查你的输入数字是0到32之间的数字,然后只做n * L.
int result = 0;
if(n>=0&&n<32){
result=n*L;
}else{
System.err.println("wrong number");
//or do whatever you have to
}