深刻談談java的列舉(enum)類型。本站提示廣大學習愛好者:(深刻談談java的列舉(enum)類型)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻談談java的列舉(enum)類型正文
媒介
在年夜家平常編程中,常常存在著如許的“數據集”,它們的數值在法式中是穩固的,並且“數據集”中的元素是無限的。例如禮拜一到禮拜日七個數據元素構成了一周的“數據集”,春夏秋冬四個數據元素構成了四時的“數據集”。在java中若何更好的應用這些“數據集”呢?是以列舉便派上了用處
列舉其實就是一品種型,跟int, char 這類差不多,就是界說變量時限制輸出的,你只可以或許賦enum外面劃定的值。
列舉(enum)完成
JDK5中供給了Java列舉類型的完成,與其說是一種新類型,倒不如說是一種語法糖。
public enum Season { SPRING, SUMMER, AUTUMN, WINTER }
經由過程反編譯對象來看看這段代碼是若何完成的,反編譯後的代碼以下:
public final class Season extends Enum { public static Season[] values() { return (Season[])$VALUES.clone(); } public static Season valueOf(String s) { return (Season)Enum.valueOf(Season, s); } private Season(String s, int i) { super(s, i); } public static final Season SPRING; public static final Season SUMMER; public static final Season AUTUMN; public static final Season WINTER; private static final Season $VALUES[]; static { SPRING = new Season("SPRING", 0); SUMMER = new Season("SUMMER", 1); AUTUMN = new Season("AUTUMN", 2); WINTER = new Season("WINTER", 3); $VALUES = (new Season[] { SPRING, SUMMER, AUTUMN, WINTER }); } }
經由過程反編譯的代碼可以發明:
1、Season
是一個通俗的類,繼續自Enum
,並經由過程final
症結字潤飾,防止被繼續,
2、列舉中的SPRING
、SUMMER
、AUTUMN
和WINTER
是Season
類的靜態實例,並在類結構器<clinit>
辦法中停止初始化。
3、values()
辦法前往公有變量$VALUES[]
的正本,$VALUES[]
也是在<clinit>
辦法中停止初始化。
若何應用列舉(enum)
1、單例形式
我們曾經曉得類結構器<clinit>
只能被一個線程在類加載的初始化階段停止履行,所以列舉的每一個實例在Java堆中有且只要一個正本,這類特征讓列舉很輕易就完成了單例形式,這也恰是Effective Java作者 Josh Bloch 倡導應用完成單利形式的方法。
public enum Singleton { INSTANCE;}
2、在switch中應用
3、自界說字段和辦法
列舉(enum)中除默許字段和辦法以外,可以針對營業邏輯停止自界說。
public enum EnumTest { PLUS("+") { @Override public int bind(int arg1, int arg2) { return arg1 + arg2; } }, SUB("-") { @Override public int bind(int arg1, int arg2) { return arg1 - arg2; } }; final String operation; EnumTest(String operation) { this.operation = operation; } abstract int bind(int arg1, int arg2); }
4、完成接口
interface Operation{ int operate(int arg1, int arg2); } public enum EnumTest implements Operation { PLUS("+") { @Override public int operate(int arg1, int arg2) { return arg1 + arg2; } }, SUB("-") { @Override public int operate(int arg1, int arg2) { return arg1 - arg2; } }; final String operation; EnumTest(String operation) { this.operation = operation; } }
在現實運用中,可以把 "+"、"-" 作為key,PLUS和SUB作為value
,事後保留在hashMap
中,詳細應用方法以下:
Operation operation = hashMap.get("+"); int result = operation.bind(1, 2);
總結
以上就是關於Java中列舉類型的全體內容了,願望經由過程本文對java中列舉的引見,可以或許給年夜家帶來贊助。假如有疑問年夜家可以留言交換。