Printing the enum's name
-
25-10-2019 - |
Question
I'm using eclipse + Android SDK on ubuntu.
I would like to print the name of a sensor type device, there a A LOT OF THEM and i want to do it automatically.
If i use a
Log.d("SENSORTYPE","Type: " + tempSensor.getType())
I print the (int) type, but i would like the name whom use the enum.
How could i do that?
Thants in advance.
Solution
For enumerations, you can obtain an array of all the constants and loop over them very easily using code such as this:
for(YourEnum value: YourEnum.values()){
System.out.println("name="+value.name());
}
However, the Sensor class you link to isn't an enumeration, but contains a list of constants. There's no way to programatically loop over that list like an enumeration without specifying all the constants names.
However, you can create a static lookup that maps the ints to the String value you want to use, for example
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
You can use this like this:
Log.d("SENSORTYPE","Type: " + lookup.get(tempSensor.getType()));
This approach does mean you still have to write out each constant and update the list if the constants change, but you only have to do it once. It'd be a good idea to wrap the lookup in some kind of helper method or class depending on how widely you want to reuse it.
OTHER TIPS
you can introduce an abstract
method and implement it in every enumeration
enum Colour {
Red {
@Override
String colourName() {
return "Red";
}
};
abstract String colourName();
}
This way gives you more flexibility, for example, if you don't want to display its programmatic name
Log.d("SENSORNAME", "NAME: " + tempSensor.name());