枚舉類型是工程化中的某些特殊含義字段的集合展現形式,在一個大中型項目中,枚舉有着廣泛的運用場景,
主要有這幾個需求:
1,獲取當前枚舉的值(一般是int類型值:1,2,3)
2,枚舉名稱(包括中文名和英文名)
3,根據枚舉值定義到某個枚舉類型(例如:1定位到枚舉中的YES等)
一,獲取枚舉值基礎接口
public interface IEnum<T extends Enum<T>> {
/**
* 返回枚舉對應的值
*
* @return int
*/
int getValue();
}
二,獲取枚舉名稱接口
public interface INameEnum<T extends Enum<T>> extends IEnum<T> {
/**
* 返回枚舉對應的中文名稱
*
* @return String
*/
String getNameCn();
/**
* 返回枚舉對應的英文名稱
*
* @return String
*/
String getNameEn();
}
三,實現從int到enum的轉換函數
/**
* 從int到enum的轉換函數
* @param value 整數值
* @return 枚舉值,如果沒有對應的枚舉返回爲null
*/
public static TestEnum enumOf(int value) {
for (TestEnum testEnum : TestEnum.values()) {
if (testEnum.value == value) {
return testEnum;
}
}
return null;
}
所以,完整的枚舉類型實現如下
public enum TestEnum implements INameEnum<TestEnum> {
YES(1,"是","Yes"),
NO(2,"否","No");
/**
* 枚舉值
*/
private int value;
/**
* 枚舉中文名
*/
private String nameCn;
/**
* 枚舉英文名
*/
private String nameEn;
TestEnum(int value, String nameCn, String nameEn) {
this.value = value;
this.nameCn = nameCn;
this.nameEn = nameEn;
}
/**
* 返回中文名稱
*
* @return String
*/
@Override public String getNameCn() {
return this.nameCn;
}
/**
* 返回英文名稱
*
* @return String
*/
@Override public String getNameEn() {
return this.nameEn;
}
/**
* 返回數值
*
* @return int
*/
@Override public int getValue() {
return this.value;
}
/**
* 從int到enum的轉換函數
* @param value 整數值
* @return 枚舉值,如果沒有對應的枚舉返回爲null
*/
public static TestEnum enumOf(int value) {
for (TestEnum testEnum : TestEnum.values()) {
if (testEnum.value == value) {
return testEnum;
}
}
return null;
}
}
嘗試使用
@Test
public void test(){
System.out.println(TestEnum.enumOf(1));
System.out.println(TestEnum.YES.getNameCn());
System.out.println(TestEnum.YES.getNameEn());
System.out.println(TestEnum.YES.getValue());
}
輸出如下
YES
是
Yes
1