import java.util.EnumSet; import java.util.HashMap; import java.util.Map; public enum EnumDemo { // For this enum each value has an identification code // other than the internal ordinal value DEMANDED(10), SPECIFIED(20), EVALUATED(30), DUPLICATE(33), ESTIMATED(35), WORKAROUND (36), ACCEPTED(37), PLANNED(40), BUSY(50), IMPLEMENTED(60), REJECTED(100); private int code; /** * @param code constructor takes code to be associated with enum */ EnumDemo(int code) { this.code = code; } /** * Helper map for reverse lookup in getByCode method */ private static Map<Integer,EnumDemo> enumByCode; static{ enumByCode = new HashMap<Integer, EnumDemo>(); for (EnumDemo val: EnumDemo.values()) { enumByCode.put(val.getCode(),val); } } public int getCode() { return code; } /** * reverse lookup * @param code the code of the enum * @return the enum or null if the code does not exist */ public static EnumDemo getByCode(int code){ return enumByCode.get(code); } /** * test if a code exists * @param code * @return true if the code exists */ public static boolean isCodeValid(int code){ return enumByCode.containsKey(code); } /** * enumToString: EnumDemo.DEMANDED to "DEMANDED" * @return enum value name as a String */ public String getName(){ return toString(); } /** * StringToEnum: " demanded" to EnumDemo.DEMANDED * @param name case insensitive and leading and trailing spaces are ignored * @return the enum constant */ public static EnumDemo getByName(String name){ return EnumDemo.valueOf(name.trim().toUpperCase()); } /** * convert between enum and internal ordinal number * not recommended to expose this, just here for demo purposes * @return internal ordinal number of the constant */ public int getOrdinal(){ return getOrdinal(); } /** * convert from ordinal number to enum. Not recommended. * @param ordinal * @return the enum */ public static EnumDemo getByOrdinal(int ordinal){ return EnumDemo.values()[ordinal]; } // some tests and subsets // alternate methods can be written using the codes /** * * @return is this enum in a range? */ public boolean isOK(){ return ACCEPTED.compareTo(this) <= 0 && IMPLEMENTED.compareTo(this) >= 0; } /** * @return an enum subrange */ public static EnumSet<EnumDemo> getOK(){ return EnumSet.range(ACCEPTED,IMPLEMENTED); } /** * @return is this enum in a subset? */ public boolean isNOK(){ return this == DUPLICATE || this == WORKAROUND || this == REJECTED; } /** * * @return get an enum subset */ public static EnumSet<EnumDemo> getNOK(){ return EnumSet.of(DUPLICATE,WORKAROUND,REJECTED); } }
15 April 2012
Java enum demo
Labels:
enum,
java,
jhtp,
patternsEE6,
SL-275
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment