2013-07-27 210 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" 

当然,你必须捕捉一些例外。

相关问题