java枚舉類是非常常用的類型
下面做一個簡單的總結
一、枚舉基礎
public enum FilterType { DATE_FILTER, TEXT_FILTER, SELECT_FILTER; public static void main(String[] args) { //通過下標返回枚舉對象 FilterType[] values = FilterType.values(); FilterType filterType = values[0]; System.out.println(filterType); //通過枚舉對象返回下標 int index = filterType.ordinal(); System.out.println(index); //通過枚舉對象返回名稱 String name = filterType.name(); System.out.println(name); //通過字符串名稱返回枚舉對象 FilterType date_filter = FilterType.valueOf("DATE_FILTER"); System.out.println(date_filter); } }
二、給枚舉類型添加屬性
public enum ColumnType { INT("整型"), DOUBLE("浮點型"), DATE_YYYY("日期:yyyy"), DATE_YYYY_MM("日期:yyyy-MM"), DATE_YYYY_MM_DD("日期:yyyy-MM-dd"), DATETIME("日期時間"), VARCHAR("字符串"); private final String value; ColumnType(String value) { this.value = value; } public String getValue() { return value; } public static void main(String[] args) { String value = ColumnType.INT.getValue(); System.out.println(value); } }
三、給枚舉添加方法
如果每個枚舉對象都需要有不同的行為,可以通過在枚舉類中定義抽象方法的形式實現。
這樣每個枚舉對象都需要實現這個抽象方法
public enum TemplateStatus { DRAFT(0) { void say() { System.out.println("草稿"); } ; },//草稿 RELEASE(1) { void say() { System.out.println("發布"); } };//發布 private final int value; TemplateStatus(int value) { this.value = value; } public int getValue() { return value; } abstract void say(); }
四、枚舉Set和枚舉Map
因為枚舉類不能靈活的添加和刪除元素,所以java本身又提供了EnumSet和EnumMap來增強這方面的功能。
//EnumSet可以表示包含不包含,開或關 EnumSet<ColumnType> columnTypes1 = EnumSet.noneOf(ColumnType.class); EnumSet<ColumnType> columnTypes = EnumSet.allOf(ColumnType.class); EnumSet<ColumnType> range = EnumSet.range(INT, VARCHAR); EnumSet<ColumnType> anInt = EnumSet.of(INT, DOUBLE); boolean contains = columnTypes.contains(ColumnType.INT); //EnumMap可以實現類似命令模式或策略模式的功能 EnumMap<ColumnType, String> enumMap = new EnumMap<ColumnType, String>(ColumnType.class); enumMap.put(ColumnType.INT,"int"); String s = enumMap.get(ColumnType.DOUBLE);