Home » Android » java – Printing the enum's name

java – Printing the enum's name

Posted by: admin June 15, 2020 Leave a comment

Questions:

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.

How to&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.

Answer:

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

Answer:

Log.d("SENSORNAME", "NAME: " + tempSensor.name());