2011-05-10 140 views
0

如果給定給定枚舉的int值,我該如何反向查找字符串值?所以如果給我一個0的整數值,它應該返回一個「新生1」的值,我不知道它。簡單枚舉問題

public enum YearsInSchool { 
FRESHMAN1(0, "Freshman 1"), 
FRESHMAN2(1, "Freshman 2"), 
SOPHOMORE1(2, "Sophomore 1"), 
SOPHOMORE2(3, "Sophomore 2"), 
JUNIOR1(4, "Junior 1"), 
JUNIOR2(5, "Junior 2"), 
SENIOR1(6, "Senior 1"), 
SENIOR2(7, "Senior 2"), 
GRADUATE(8, "Graduate"), 
FACULTY(9, "Faculty"); 

private int intVal; 
private String strVal; 

YearsInSchool(int intValIn, String strValIn){ 
    intVal = intValIn; 
    strVal = strValIn;  
} 

public int getIntVal() { 
    return intVal; 
} 

public String getStrVal() { 
    return strVal; 
} 

}

回答

1

這應返回FRESHMAN1

YearsInSchool yis = (YearsInSchool) YearsInSchool.class.getEnumConstants()[0]; 

,如果你什麼「新生1」,你應該能夠做到yis.getStrVal()

+0

感謝你,非常棒!這麼簡單..大聲笑 – thunderousNinja 2011-05-10 18:00:46

5

YearsInSchool.values()[0];將讓你的第一個枚舉值。

enum還有一個內置的ordinal()方法,該方法返回集合中的索引。看起來你只是複製這與你的intVal

+0

+1:我會刪除intVal,以避免與ordinal()混淆。您可以將值()存儲在靜態最終字段中,如果調用很多,可以提高性能。 ;) – 2011-05-10 18:02:29

2

如果你不想讓它依賴於常量的順序,你可以使用static塊初始化的查找表:

public enum YearsInSchool { 
    ... 
    private static Map<Integer, YearsInSchool> intsToValues = new HashMap<Integer, YearsInSchool>(); 
    static { 
     for (YearsInSchool y: values()) 
      intsToValues.put(y.getIntValue(), y); 
    } 

    public static YearsInSchool getByInt(int y) { 
     return intsToStrings.get(y); 
    } 
} 
+0

這是一個很好的方法,但如果所需要的只是定義的順序,'ordinal()'是一個更簡單的方法。 – 2011-05-10 18:15:53

1

如果使用巴拉回答你被關在在藏在心裏序列。我更喜歡創建一個查找地圖。

private static Map<Integer, YearsInSchool> intMap 
    = new HashMap<Integer, YearsInSchool>(); 
在構造函數

添加一行 intMap.put(intVal, this);

添加方法

public static YearsInSchool getByInt(int n) { 
    return intMap.get(n); // error handling omitted here 
} 

現在你可以爲你沒有考慮到的情況下添加更多的枚舉值;你並不需要它們。 (例如,你可以爲REDSHIRT_FRESHMAN等枚舉)

0

只需使用下面的代碼,你可以調用方法getStrValIn上枚舉類

public enum YearsInSchool { 
    FRESHMAN1(0, "Freshman 1"), FRESHMAN2(1, "Freshman 2"), SOPHOMORE1(2, 
      "Sophomore 1"), SOPHOMORE2(3, "Sophomore 2"), JUNIOR1(4, "Junior 1"), JUNIOR2(
      5, "Junior 2"), SENIOR1(6, "Senior 1"), SENIOR2(7, "Senior 2"), GRADUATE(
      8, "Graduate"), FACULTY(9, "Faculty"); 

    private int intVal; 
    private String strVal; 

    YearsInSchool(int intValIn, String strValIn) { 
     intVal = intValIn; 
     strVal = strValIn; 
    } 

    public static String getStrValIn(int intValIn){ 

     YearsInSchool[] values = values(); 

     for (YearsInSchool yearsInSchool : values) { 

      if(yearsInSchool.getIntVal() == intValIn){return yearsInSchool.getStrVal();} 
     } 

     return null; 
    } 

    public int getIntVal() { 
     return intVal; 
    } 

    public String getStrVal() { 
     return strVal; 
    } 

} 

這將解決你的問題