switch 结合枚举使用
一般枚举的格式是,枚举类.枚举类型,使用 switch 的要义在于,case 枚举类型,而不是 case 枚举类.枚举类型
定义一个枚举类
public enum TestEnum {
TEST_ONE("name1","one"),//枚举类型
TEST_TWO("name2","two");//枚举类型
private String key;
private String value;
private TestEnum(String key,String value){
this.key=key;
this.value=value;
}
public String getKey() {
return key;
}
public String getValue() {
return value;
}
@Override
public String toString() {
return "[key="+key+";value="+value+"]";
}
}
switch 结合 枚举类型举例
public static void main(String[] args) {
//声明一个枚举类型
TestEnum t=TestEnum.TEST_ONE;
//将枚举类型传入 switch 做为条件判断依据
switch(t){
case TEST_ONE://这里是关键点,TestEnum.TEST_ONE 只需写 TEST_ONE
System.out.println("one");
break;
case TEST_TWO:
System.out.println("two");
break;
default:
break;
}
}
运行结果
one
连续 case 没有 break 等同于 or
public static void test1(int i){
switch (i){
case 0:
case 1:
System.out.println("a");
break;
}
}
@Test
public void test2(){
test2(0);
}
结果:
a
最佳实践——没有枚举制造枚举
如果你的程序中充满了
if
、else
语句,那么是时候展现真正的技术了,就是使用本文枚举结合 switch 的方法,代码逻辑一下子就清晰了,可以有时候我们会遇到什么问题呢?入参不是枚举类型,没法直接结合,so本文介绍一个方法,就是将非枚举类型入参转化为枚举类型入参
- 将入参 value 转化为对应的 枚举类型
/**
* 将入参 value 转化为对应的 枚举类型
* @param caseValue
* @return
*/
@SuppressWarnings("unused")
private static TestEnum getTestEnumByValue(String caseValue){
TestEnum[] testEnumArrays=TestEnum.values();
for(int i=0;i<testEnumArrays.length;i++){
if(testEnumArrays[i].getValue().equals(caseValue)){
return testEnumArrays[i];
}
}
return null;
}
- 将入参 key 转化为对应的 枚举类型
/**
* 将入参 key 转化为对应的 枚举类型
* @param caseKey
* @return
*/
@SuppressWarnings("unused")
private static TestEnum getTestEnumByKey(String caseKey){
TestEnum[] testEnumArrays=TestEnum.values();
for(int i=0;i<testEnumArrays.length;i++){
if(testEnumArrays[i].getKey().equals(caseKey)){
return testEnumArrays[i];
}
}
return null;
}
- 测试方法
public static void main(String[] args) {
//以 value 值 获取 枚举类型
String caseValue="one";
TestEnum testEnumValue=getTestEnumByValue(caseValue);
if(testEnumValue!=null){
System.out.println(testEnumValue.toString());
}
//以 key 值 获取 枚举类型
String caseKey="name1";
TestEnum testEnumKey=getTestEnumByKey(caseKey);
if(testEnumKey!=null){
System.out.println(testEnumKey.toString());
}
}
- 测试结果
[key=name1;value=one]
[key=name1;value=one]