我想用Java创建一个通用的switch case语句。
我正在编写一个程序,在某些时候我必须为switch语句创建32个不同的case:case 0 : , case 1 : , .... case 31 :
。然后在每种情况下我都要编写一些代码行。有没有办法实现一般的switch case语句,这样我就不必编写32个单独的case?
例如:
switch(n){
case k :
.....
{
我如何在java中实现它?有可能吗?
答案 0 :(得分:5)
为什么不使用default
分支:
switch (n) {
// cases for which you need custom behavior...
default:
// use n for the general case
}
答案 1 :(得分:1)
您可以使用枚举。例如,这是一个枚举,它将数字的名称与其整数值匹配:
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()
,但这只是为了说明)
答案 2 :(得分:0)
当您看到32个案例的switch语句和可能经常需要增强的案例时,它通常会发出code or design "smell"的信号。您可能需要在代码的多个位置复制此交换机结构,然后以高维护成本和违反Open/closed Principle和Single Responsibility Principle的脆弱代码结束(作为单个需求的变化可能会迫使您在多个位置进行机会编码。)
此问题的解决方案是将代码分解为多个类以利用polymorphism。当您处理分解时,您必须考虑Design Pattern将为您提供最适合替换switch语句的内容。一些潜在的候选人(因为我不知道您的代码的性质)是:Command,Strategy,Visitor;但也有其他人。
答案 3 :(得分:0)
在每种情况下我必须写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
}