java 1.6的字符串类型开关
我有下面的代码,我想知道是否有一种方法可以使用开关块而不是一堆if/else语句。我知道Java从Java 1.7开始就支持开关块中的字符串,但我仍在使用Java 1.6:java 1.6的字符串类型开关,java,switch-statement,Java,Switch Statement,我有下面的代码,我想知道是否有一种方法可以使用开关块而不是一堆if/else语句。我知道Java从Java 1.7开始就支持开关块中的字符串,但我仍在使用Java 1.6: } else if (typeName.equals("Boolean")) { return new SwitchInputType<Boolean>(new Boolean((String) memberValue)); } else if (typeName.eq
} else if (typeName.equals("Boolean")) {
return new SwitchInputType<Boolean>(new Boolean((String) memberValue));
} else if (typeName.equals("Double")) {
return new SwitchInputType<Double>(new Double((String) memberValue));
} else if (typeName.equals("Int32"))
}else if(typeName.equals(“布尔”)){
返回新的SwitchInputType(新的布尔值((字符串)memberValue));
}else if(typeName.equals(“Double”)){
返回新的SwitchInputType(新的双精度((字符串)memberValue));
}else if(typeName.equals(“Int32”))
由于您的字符串都是有效标识符,您可以使用这些字符串作为项标签创建枚举,使用(或将在枚举类中创建的类似valueOf(String)
方法)转换为枚举类型的成员,然后基于该成员进行切换
例如:
enum TypeName { Boolean, Double, Int32 }
switch (TypeName.valueOf(typeName)) {
case Boolean: // ...
case Double: // ...
case Int32: // ...
}
将字符串映射到enum,因为enum可以在开关情况下使用。每个枚举都有一个valueOf(String)方法,该方法将字符串类型转换为枚举类型。然后您可以将此枚举与交换机内的各种情况相匹配。唯一需要注意的是字符串应该是要转换为枚举的有效标识符。如果字符串不是有效的标识符(即无法转换为枚举类型),则您可能会得到IllegalArgumentExceptionAnkur已经建议了一种方法。另一种方法是将它们定义为常量。 前 私有静态最终字符串BOOLEAN=“1” 开关(整数.parseInt(布尔)) 案例1: 案例2:
等等。您甚至可以让
枚举为您执行以下操作:
public static void main(String[] args) throws InterruptedException {
String typeName = "Boolean";
String memberValue = "memberValue";
SwitchInputType type = Type.valueOf(typeName).makeType(memberValue);
}
enum Type {
Boolean {
SwitchInputType makeType(String memberValue) {
return new SwitchInputType<Boolean>(new Boolean(memberValue));
}
},
Double {
SwitchInputType makeType(String memberValue) {
return new SwitchInputType<Double>(new Double(memberValue));
}
},
Int32 {
SwitchInputType makeType(String memberValue) {
return new SwitchInputType<Integer>(new Integer(memberValue));
}
};
// All must do this.
abstract SwitchInputType makeType(String memberValue);
}
static class SwitchInputType<T> {
public SwitchInputType(Object o) {
}
}
publicstaticvoidmain(String[]args)抛出InterruptedException{
字符串typeName=“Boolean”;
字符串memberValue=“memberValue”;
SwitchInputType类型=type.valueOf(typeName).makeType(memberValue);
}
枚举类型{
布尔值{
SwitchInputType makeType(字符串成员值){
返回新的SwitchInputType(新的布尔值(memberValue));
}
},
双重的{
SwitchInputType makeType(字符串成员值){
返回新的SwitchInputType(新的Double(memberValue));
}
},
Int32{
SwitchInputType makeType(字符串成员值){
返回新的SwitchInputType(新整数(memberValue));
}
};
//所有人都必须这样做。
抽象开关输入类型makeType(字符串成员值);
}
静态类开关输入类型{
公共开关输入类型(对象o){
}
}
@TGMCians但是有一种方法可以使用其他东西来完成这项工作,可能是静态的(不知道如何做)-1感谢你没有做基础研究。我只是在谷歌上搜索了一下,我发现有很多类似的问题。@Jules-cam你能提供一个例子吗?快速添加的例子——没有在编译器中尝试过,但它应该可以工作。谢谢,但是枚举是什么,我应该如何定义它?枚举应该在同一个类中还是不同的?我把它作为一个私有类ate在类中嵌套类使用它的代码位于+1中,以获得更面向对象的方法。谢谢,但代码没有进入抽象的SwitchInputType makeType(String memberValue);由于返回语句,我想这就是类型没有真正类型的原因?你知道我如何修复它吗?@johnjerby-对不起,我不理解你的问题。它不能进入抽象方法,那里没有代码。抽象方法是用来确保所有枚举都实现它的方法。valueOf
调用的结果是一个enum
,它有一个makeType
方法,然后用String
参数调用该方法。添加一些打印语句并运行代码-你会明白的。-1-EWWWW!太可怕了!这种方法有什么问题。我只是建议一种替代方法。s解决方案不正确。由用户决定选择枚举与常量哪个选项。