深刻談談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中列舉的引見,可以或許給年夜家帶來贊助。假如有疑問年夜家可以留言交換。