Joh*_*rby 5 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.equals("Double")) {
return new SwitchInputType<Double>(new Double((String) memberValue));
} else if (typeName.equals("Int32"))
Run Code Online (Sandbox Code Playgroud)
你甚至可以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) {
}
}
Run Code Online (Sandbox Code Playgroud)
由于您的字符串都是有效的标识符,您可以使用这些字符串作为项标签创建枚举,使用Enum.valueOf(Class,String)(或valueOf(String)将在枚举类中创建的类似方法)转换为成员枚举类型,然后切换基于...
例:
enum TypeName { Boolean, Double, Int32 }
switch (TypeName.valueOf(typeName)) {
case Boolean: // ...
case Double: // ...
case Int32: // ...
}
Run Code Online (Sandbox Code Playgroud)