Using Enum values as String literals

Viewed 848840

What is the best way to use the values stored in an Enum as String literals? For example:

public enum Modes {
    some-really-long-string,
    mode1,
    mode2,
    mode3
}

Then later I could use Mode.mode1 to return its string representation as mode1. Without having to keep calling Mode.mode1.toString().

19 Answers
public enum Environment
{
    PROD("https://prod.domain.com:1088/"),
    SIT("https://sit.domain.com:2019/"),
    CIT("https://cit.domain.com:8080/"),
    DEV("https://dev.domain.com:21323/");

    private String url;

    Environment(String envUrl) {
        this.url = envUrl;
    }

    public String getUrl() {
        return url;
    }
}

String prodUrl = Environment.PROD.getUrl();

It will print:

https://prod.domain.com:1088/

This design for enum string constants works in most of the cases.

i found this one is more easy for preventing type error:

public enum Modes {
    some-really-long-string,
    mode1,
    mode2,
    mode3;

    String str;

    Modes(){
        this.str = super.name();
    }

    @Override
    @NonNull
    public String toString() {
        return str;
    }

however - this may work when you need to use a String on a log/println or whenever java compiles the toString() method automatically, but on a code line like this ->

// sample method that require (string,value)
intent.putExtra(Modes.mode1 ,shareElement.getMode()); // java error
// first argument enum does not return value

instead as mentioned above you will still have to extend the enum and use .name() in those cases like this:

intent.putExtra(Modes.mode1.name() ,shareElement.getMode()); 

You can try this:

public enum Modes {
    some-really-long-string,
    mode1,
    mode2,
    mode3;

    public String toString(){
        switch(this) {
            case some-really-long-string:
                return "some-really-long-string";
            case mode2:
                return "mode2";
            default: return "undefined";
        }
    }

}

use mode1.name() or String.valueOf(Modes.mode1)

Related