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