One option is this:
public class Something {
public static final int SOMETHING_0 = 0;
public static final int SOMETHING_1 = 1;
public static final int SOMETHING_2 = 2;
public String toString(int value) {
switch (value) {
case SOMETHING_0: return "SOMETHING_0";
case SOMETHING_1: return "SOMETHING_1";
case SOMETHING_2: return "SOMETHING_2";
}
throw new IllegalArgumentException("Unknown value: " + value);
}
}
// Use:
int value = Something.SOMETHING_1;
String name = Something.toString(value);
If int
values are consecutive, starting at 0
, then you can use an enum
and it's ordinal()
position:
public enum Something {
SOMETHING_0, SOMETHING_1, SOMETHING_2
}
// Use:
int value = Something.SOMETHING_1.ordinal();
String name = Something.values()[value].name(); // or toString()
If int
values are not consecutive, you can still use enum
:
enum Something {
SOMETHING_0(0),
SOMETHING_10(10),
SOMETHING_20(20);
private final int value;
private Something(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
public static Something from(int value) {
for (Something something : values())
if (something.value == value)
return something;
throw new IllegalArgumentException("Unknown value: " + value);
}
}
// Use:
int value = Something.SOMETHING_10.getValue();
String name = Something.from(value).name(); // or toString()
Alternatively, if you want display text to be different from constant name, and you don't like exceptions, you can do this:
enum Something {
SOMETHING_0 ( 0, "Something 0"),
SOMETHING_10(10, "Something 10"),
SOMETHING_20(20, "Something 20");
private final int value;
private final String description;
private Something(int value, String description) {
this.value = value;
this.description = description;
}
public int getValue() {
return this.value;
}
public String getDescription() {
return this.description;
}
public static Optional<Something> from(int value) {
for (Something something : values())
if (something.value == value)
return Optional.of(something);
return Optional.empty();
}
public static String toString(int value) {
for (Something something : values())
if (something.value == value)
return something.description;
return "Unknown value (" + value + ")";
}
}
// Use:
String desc = Something.toString(value);
// Or:
String desc = Something.from(value).map(Something::getDescription).orElse("Oops");