我有以下代码,我想知道是否有办法使用switch块而不是一堆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.equals("Double")) {
return new SwitchInputType<Double>(new Double((String) memberValue));
} else if (typeName.equals("Int32"))
答案 0 :(得分:8)
你甚至可以让enum
为你做这件事:
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) {
}
}
答案 1 :(得分:6)
由于您的字符串都是有效的标识符,您可以使用这些字符串作为项标签创建枚举,使用Enum.valueOf(Class, String)(或将在枚举类中创建的类似valueOf(String)
方法)转换为枚举类型的成员,然后根据...
示例:
enum TypeName { Boolean, Double, Int32 }
switch (TypeName.valueOf(typeName)) {
case Boolean: // ...
case Double: // ...
case Int32: // ...
}
答案 2 :(得分:0)
将您的String映射到枚举,因为枚举可用于切换案例。每个枚举都有一个 valueOf(String)方法,将字符串类型转换为枚举类型。然后你可以将这个枚举与switch中的各种情况相匹配。您唯一需要注意的是String应该是要转换为枚举的有效标识符。如果字符串不是有效的标识符(即无法转换为枚举类型,那么您可能最终得到 IllegalArgumentException 。
答案 3 :(得分:0)
Ankur已经提出了一种方法。另一种方法是将它们定义为常量。 前 - private static final String BOOLEAN =&#34; 1&#34 ;;
开关(的Integer.parseInt(布尔)) 案例1:......
案例2:......
等等。