靜態常量是編譯期常量,若是其值被改變,那麼使用方須要從新編譯。項目初始化的時候會被所有加載到內存中,消耗內存。java
枚舉的建立能夠把一類具備相贊成義的常量放在一個相同的枚舉類裏,獲取裏面的常量值是在類加載使用的時候使用反射機制獲取的值。this
枚舉類的建立:blog
public enum BooleanType { NULL(""), TRUE("1"), FALSE("0"); BooleanType(String value) { EnumUtil.changeNameTo(this,value); } }
獲取枚舉值的數值的幫助類:內存
public class EnumUtil { /** * 獲取枚舉值 * * @param enumInstance 枚舉常量 * @param value 枚舉常量的value * @param <T> 枚舉的類型參數 */ public static <T extends Enum<T>> void changeNameTo(T enumInstance, String value) { try { Field fieldName = enumInstance.getClass().getSuperclass().getDeclaredField("name"); fieldName.setAccessible(true); fieldName.set(enumInstance, value); fieldName.setAccessible(false); } catch (Exception e) { e.printStackTrace(); } } }
幫助類這裏使用了反射機制。get
/** * 枚舉類型的比較,包括null * * @param enum1 枚舉常量1 * @param enum2 枚舉常量2 * @return 若是相等返回true, 不然返回false */ public static boolean enumEquals(Enum enum1, Enum enum2) { if (enum1 == null && enum2 == null) { return true; } else if (enum1 != null) { return enum1.equals(enum2); } else { return enum2.equals(enum1); }
以上是枚舉值的比較邏輯。io
枚舉的使用:編譯
System.out.println(BooleanType.FALSE);