java5引入了枚举类这一新特性,最近开发用到了,主要是用来解决将大量判断if-else语句转换为switch-case语句,这样程序从执行效率和可读性都会得到很大提升。
关于枚举类,网上的资料都没怎么提到,如何根据一个动态的输入值,来得到该枚举类的实例,这里参考了一篇文章《java switch的使用+switch用String作为条件》
public enum Bank {
ICBC("95588"),YNRCC("96500"), BOC("95566"), BOCM("95599"), UNKNOWN("");
// ICBC, YNRCC, BOC, BOCM;
private String bank;
private Bank(String str) {
this.bank = str;
}
private String getBank() {
return this.bank;
}
private void setBank(String b) {
this.bank = b;
}
//覆盖enum.toString()方法
public String toString() {
return bank;
}
/**
*
* @功能 : TODO 将输入值变成枚举常量值,注意该方法需要再外部调用,应定义为static
* @param str
* @return
*/
public static Bank getBank(String str) {
System.out.println("str="+str);
try {
System.out.println("valueOf(str)="+valueOf(str));
return valueOf(str);
}catch (Exception e) {
System.out.println("....");
return UNKNOWN;
}
}
}
下面开始测试这个枚举类
//实例化枚举类
public static void testIfSwitch1(String input) {
Bank bankList = Bank.getBank(input);
System.out.println("bankList="+bankList+",bankList.hashCode="+bankList.hashCode());
switch(bankList) {
case YNRCC:
{
System.out.println("YNRCC bankList="+bankList);
//自定义业务逻辑
};
break;
case ICBC:
{
System.out.println("ICBC bankList="+bankList);
//自定义业务逻辑
};
break;
case BOC: {
System.out.println("BOC bankList="+bankList);
//自定义业务逻辑
};
break;
case BOCM: {
System.out.println("BOCM bankList="+bankList);
//自定义业务逻辑
};
break;
default: System.out.println("defalut bankList="+bankList);break;
}
}
调用
testIfSwitch1("BOC");
执行结果:
str=BOC
valueOf(str)=95566
bankList=95566,bankList.hashCode=7699183
BOC bankList=95566