枚举类型是工程化中的某些特殊含义字段的集合展现形式,在一个大中型项目中,枚举有着广泛的运用场景,
主要有这几个需求:
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