打印枚举的名称

vgo*_*anz 8 java enums android sensor android-logcat

我在ubuntu上使用eclipse + Android SDK.

我想打印传感器类型设备的名称,有很多他们,我想自动做.

如果我使用

Log.d("SENSORTYPE","Type: " + tempSensor.getType())
Run Code Online (Sandbox Code Playgroud)

我打印(int)类型,但我想使用枚举的名称.

我怎么能这样做?

提前解冻.

chr*_*ney 13

对于枚举,您可以使用以下代码非常轻松地获取所有常量的数组并循环它们:

for(YourEnum value: YourEnum.values()){
    System.out.println("name="+value.name());
}
Run Code Online (Sandbox Code Playgroud)

但是,链接到的Sensor类不是枚举,而是包含常量列表.如果没有指定所有常量名称,就无法像枚举那样以编程方式循环遍历该列表.

但是,您可以创建一个静态查找,例如,将int映射到要使用的String值

Map<Integer,String> lookup = new HashMap<Integer,String>();
lookup.put(TYPE_ACCELEROMETER,"Accelerometer");
//Code a put for each TYPE, with the string you want to use as the name
Run Code Online (Sandbox Code Playgroud)

您可以这样使用:

Log.d("SENSORTYPE","Type: " + lookup.get(tempSensor.getType()));
Run Code Online (Sandbox Code Playgroud)

这种方法确实意味着你仍然必须写出每个常量并在常量改变时更新列表,但你只需要做一次.将查找包装在某种辅助方法或类中是一个好主意,具体取决于您希望重用它的程度.


jee*_*eet 5

Log.d("SENSORNAME", "NAME: " + tempSensor.name());
Run Code Online (Sandbox Code Playgroud)


Sle*_*idi 5

你可以引入一个abstract方法并在每个enumeration

enum Colour {

Red {

    @Override
    String colourName() {
        return "Red";
    }
};

abstract String colourName();
}
Run Code Online (Sandbox Code Playgroud)

这种方式为您提供了更大的灵活性,例如,如果您不想显示其编程名称