I have an enum in Java 8 with Lombok’s @Getter
and @AllArgsConstructor
for using additional properties for the enum value:
@Getter @AllArgsConstructor public enum MyEnum { RED(1), GREEN(2), BLUE(3), PURPLE(4); private final int ordinal; public String getDisplayName() { switch (ordinal) { case 1: return "1st color"; case 2: return "2nd color"; case 3: return "3rd color"; default: return "another color"; } } }
What I don’t like about this solution: getDisplayName()
is called quite often, thus every call runs the switch-case statement.
Is it possible to add another property like displayName
which values are set by a function analogous to getDisplayName()
?
Something like this (pseudo-code):
@Getter @AllArgsConstructor public enum MyEnum { RED(1, setDisplayName()), GREEN(2, setDisplayName()), BLUE(3, setDisplayName()), PURPLE(4, setDisplayName()); private final int ordinal; private String displayName; private void setDisplayName() { switch (ordinal) { case 1: displayName = "1st color"; case 2: displayName = "2nd color"; case 3: displayName = "3rd color"; default: displayName = "another color"; } } }
Advertisement
Answer
If you’re not married to lombok I would just provide my own constructor and let it do the heavy lifting
@Getter public enum MyEnum { RED(1), GREEN(2), BLUE(3), PURPLE(4); private final int o; private final String display; private MyEnum (int o) { this.o = o; switch (o) { case 1: display = "1st color"; break; case 2: display = "2nd color"; break; case 3: display = "3rd color"; break; default: display = "another color"; } } }
Also changed ordinal
to o
as per @hfontanez suggestion.