1. 程式人生 > >java根據輸入值例項化列舉類enum-switch

java根據輸入值例項化列舉類enum-switch

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