92

I have a enum defined like this and I would like to be able to obtain the strings for the individual statuses. How should I write such a method?

I can get the int values of the statuses but would like the option of getting the string values from the ints as well.

public enum Status {
    PAUSE(0),
    START(1),
    STOP(2);

    private final int value;

    private Status(int value) {
        this.value = value
    }

    public int getValue() {
        return value;
    }
}
Mozbi
  • 1,399
  • 1
  • 17
  • 25

6 Answers6

126

if status is of type Status enum, status.name() will give you its defined name.

harsh
  • 7,502
  • 3
  • 31
  • 32
  • 3
    @JoeMaher `toString()` seems to be the preferred way as per the official documentation: "Most programmers should use the toString() method in preference to this one, as the toString method may return a more user-friendly name." (http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html#name()) – Carsten Aug 29 '16 at 06:05
  • 12
    @Carsten `status.name()` is appropriate if you want to use it in the code (for accuracy and consistency), `status.toString()` is appropriate if you want to show it to the user (for readability). – intcreator Nov 16 '16 at 19:33
50

You can use values() method:

For instance Status.values()[0] will return PAUSE in your case, if you print it, toString() will be called and "PAUSE" will be printed.

Juvanis
  • 25,802
  • 5
  • 69
  • 87
12

Use default method name() as given bellows

public enum Category {
        ONE("one"),
        TWO ("two"),
        THREE("three");

        private final String name;

        Category(String s) {
            name = s;
        }

    }

public class Main {
    public static void main(String[] args) throws Exception {
        System.out.println(Category.ONE.name());
    }
}
bora.oren
  • 3,439
  • 3
  • 33
  • 31
Biswajit Karmakar
  • 9,799
  • 4
  • 39
  • 41
9

You can add this method to your Status enum:

 public static String getStringValueFromInt(int i) {
     for (Status status : Status.values()) {
         if (status.getValue() == i) {
             return status.toString();
         }
     }
     // throw an IllegalArgumentException or return null
     throw new IllegalArgumentException("the given number doesn't match any Status.");
 }

public static void main(String[] args) {
    System.out.println(Status.getStringValueFromInt(1)); // OUTPUT: START
}
M. Abbas
  • 6,409
  • 4
  • 33
  • 46
0

I believe enum have a .name() in its API, pretty simple to use like this example:

private int security;
public String security(){ return Security.values()[security].name(); }
public void setSecurity(int security){ this.security = security; }

    private enum Security {
            low,
            high
    }

With this you can simply call

yourObject.security() 

and it returns high/low as String, in this example

J.Stange
  • 478
  • 3
  • 8
0

You can use custom values() method:

public enum SortType { Scored, Lasted;

     public int value(){
         return this == Lasted ? 1:0;
     }
}