Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing the enum's name

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 of the enum.

How could I do that?

like image 411
vgonisanz Avatar asked Jan 10 '12 10:01

vgonisanz


3 Answers

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.

like image 164
chrisbunney Avatar answered Oct 01 '22 09:10

chrisbunney


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

like image 28
Sleiman Jneidi Avatar answered Oct 01 '22 09:10

Sleiman Jneidi


Log.d("SENSORNAME", "NAME: " + tempSensor.name());
like image 39
jeet Avatar answered Oct 01 '22 09:10

jeet