【Java】Enum的使用方式


今日在寫Android時突然想到switch能不能跟string一起使用
稍微問了一下我師父"谷哥"下了一下關鍵字 "android switch string"
就可以看到很多有趣的文章與解法
在StackOverFlow就看到了一個有趣的東西"Enum"


文章來源:

其中有提到
Java (before version 7) does not support String in switch/case. But you can achieve the desired result by using an enum.

以下就開始記錄我們實做的部分吧!


private enum FragmentNames {
    FragmentOne, FragmentTwo, FragmentThree;}

String mFragmentName = getSupportFragmentManager().getFragments().get(1).getClass().getSimpleName();
FragmentNames mFragmentNames = FragmentNames.valueOf(mFragmentName);      
switch (mFragmentNames){
          case FragmentOne:
                 Log.d(TAG, "Fragment One"); 
              break;          case FragmentTwo:
                 Log.d(TAG, "Fragment Two");
              break;          case FragmentThree:
                 Log.d(TAG, "Fragment Three");
              break;     
 }

測試結果:成功!
mFragmentName為string來源(您要判斷的文字來源)
透過enum的方式達到switch使用文字來做判斷的功能。


題外還稍微看了一些"Enum"的相關用法

基本用法:
public enum Names {
    John,Tom,Sam
}
public void getNames(){
    for(Names name: Names.values())
        System.out.println(name.toString());
}

輸出結果可以看到:
John
Tom
Sam

當我們使用enum的時候,enum會照順序分配一個排列的私有變數,透過ordinal()可以將其取出。
public void getNames(){
    for(Names name: Names.values()) {
        System.out.println(name.toString() + ":" + name.ordinal());   
    }
}
輸出結果可以看到:
John : 0
Tom : 1
Sam : 2

在enum中我們也可以帶入我們想要指定的值至該參數中:
public enum Names {
    John(00001),
    Tom(00002),
    Sam(00003);    
    private int studentId;    
    private Names(int value) {
        this.studentId = value;
    }
    public int getValue() {
        return this.studentId;
    }
}
public void getNames(){
    for(Names name: Names.values()) {
        System.out.println("Student:" + name.toString() + "\n" + "ID:"+ name.getValue());
    }
}
輸出結果可以看到:
Student:John
ID:00001
Student:Tom
ID:00002
Student:Sam
ID:00003

參考資料
The Java™ Tutorials

沒有留言:

張貼留言