0

这听起来很奇怪,但实际上很简单。

简短描述:我有一个名为的类变量

public static final String ACCELEROMETER_X = "AccX";

在一个函数中,我这样做,它从枚举中得到“ACCELEROMETER_X”(传感器是我的枚举的数组列表)。

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

关键是我想在列中介绍的不是“ACCELEROMETER_X”,而是“AccX”。任何的想法?我知道我可以使用 switch 和 case 来做到这一点,但我的枚举有超过 30 个值,所以我宁愿更喜欢其他“更清洁”的方式来做到这一点。

4

4 回答 4

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()
于 2013-07-27T11:52:33.083 回答
0

解决方案 1:如果您将值保留在类中

创建一个 Map,其键为 id (ACCELEROMETER_X),值为“AccX”,当您从 Enum 获取值时,使用 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");

}
于 2013-07-27T11:50:18.693 回答
0

在你enum添加这个

public String getAccelerometerX (){
    return ACCELEROMETER_X ;
}

进而:

for i... columns = columns + sensors.get(i).getAccelerometerX ()
于 2013-07-27T11:57:02.930 回答
0

我认为您要做的是从您在 a 中的名称中获取字段的值String,如果是这种情况,您可以执行以下操作:

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"

当然,您必须捕获一些异常。

于 2013-07-27T11:57:41.653 回答