2013-07-27 208 views
0

這聽起來很奇怪,但實際上很簡單。如何從另一個字符串獲取字符串值

簡短說明:我有一個類變量,名爲

public static final String ACCELEROMETER_X = "AccX"; 

在一個功能我做到這一點,這讓我「ACCELEROMETER_X」從枚舉(傳感器是我的枚舉的ArrayList)。

for i... 
    columns = columns + sensors.get(i).name() 

重點是我想在列中不介紹「ACCELEROMETER_X」,而是「AccX」。任何想法?我知道我可以使用switch和case來完成,但是我的枚舉有超過30個值,所以Id寧願選擇其他「更乾淨」的方式來完成它。

+0

請提供更多關於你想要完成什麼以及你在循環中做什麼的信息。 –

+0

一旦你意識到一個'enum'只是一個類的語法糖,就像Rohit所表明的那樣,這一切都變得簡單。 – Simon

回答

1

如果你希望你的enum常量與字符串的值來代替,更好的辦法是保持這個字符串當作一個領域在enum本身:

enum Sensor { 
    ACCELEROMETER_X("AccX"), 
    // Other constants 
    ; 

    private final String abbreviation; 

    private Sensor(final String abbreviation) { 
     this.abbreviation = abbreviation; 
    } 

    @Override 
    public String toString() { 
     return abbreviation; 
    } 
} 

,而不是和:

sensors.get(i).name() 

使用本:

sensors.get(i).toString() 
0

解決方法1:如果保留值類

與主要作爲ID(ACCELEROMETER_X)和值爲「AccX」和創建地圖,當你從枚舉用它來查找值的值從地圖上使用name()作爲鍵。

Map<String, String> map = new HashMap<String,String>(); 

map.put("ACCELEROMETER_X","AccX"); 

//some place where you want value from name 
map.get(enumInstance.name()); 

解決方案2:更改枚舉(更多更好)

enum Some{ 

    ACCELEROMETER_X("AccX"); 

} 
0

在你enum添加此

public String getAccelerometerX(){ 
    return ACCELEROMETER_X ; 
} 

然後:

for i... columns = columns + sensors.get(i).getAccelerometerX() 
0

我認爲你正在試圖做的是獲取值如果是這樣的話,那麼你可以按照如下方式進行操作:

public static final String ACCELEROMETER_X = "AccX"; 

// ... 

Field field = MyClassName.class.getField("ACCELEROMETER_X"); 
String value = (String)field.get(new MyClassName()); 

System.out.println(value); // prints "AccX" 

當然,你必須捕捉一些例外。

相關問題