Re: How to prevent code repetition with enums?
Chris Uppal wrote:
daniel_nordlund_1982@hotmail.com wrote:
Hello. I was wondering if there is a better way to write the below
code. I have several enums, where each enum is for an option type and
each option has a short 1-3 letter string used when I need to identify
the option from a string. The code for each option type is identical
and I'd prefer to not repeat it over and over again.
As far as I know there is no way to remove the repetition. So, if it bothers
you particularly (and it would bother me ;-) I suggest that you generate the
enum classes automatically.
Yes. That's the option.
But a little improvement is also possible here with a single
implementation of the lookup logic, like in the following example:
public class Options {
public interface Option {
String getOptionString();
}
public static enum YesNoOption implements Option {
YES("yes"), NO("no");
private final String str;
private YesNoOption(String str) { this.str = str; }
public String getOptionString() { return str; }
public static YesNoOption getOption(String str) {
return forString(YesNoOption.class, str);
}
}
// ... other options ...
public static <T extends Enum<T> & Option> T forString(
Class<T> optionType, String str) {
for(T o : optionType.getEnumConstants())
if(o.getOptionString().equals(str))
return o;
return null;
}
}
piotr