1.工程结构
├─main
│ ├─java
│ │ └─cn.proxx.common.dic
│ │ │ DicEnumBean.java
│ │ │ DicEnumPool.java
│ │ │
│ │ └─item
│ │ │ IDicItem.java
│ │ │
│ │ └─school
│ │ StudentEnum.java
│ │
│ └─resources
└─test
└─java
└─cn.proxx.common.dic
EnumTest.java
2.代码示例
2.1 IDicItem.java 接口限定
package cn.proxx.common.dic.item;
import cn.proxx.common.dic.DicEnumPool;
import java.io.Serializable;
public interface IDicItem<T extends Serializable> {
default void putDicItem(T code, String text) {
if (code instanceof String) {
DicEnumPool.putDictItem(this, (String) code, text);
} else if (code instanceof Integer) {
DicEnumPool.putDictItem(this, (Integer) code, text);
}
}
}
2.2 DicEnumBean.java 解析类(以空间换复杂度)
package cn.proxx.common.dic;
import java.io.Serializable;
public class DicEnumBean<T extends Serializable> {
public final T code;
public final String text;
public DicEnumBean(T code, String text) {
this.code = code;
this.text = text;
}
}
2.3 DicEnumPool.java 常量池(统一入口操作类)
package cn.proxx.common.dic;
import cn.proxx.common.dic.item.IDicItem;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class DicEnumPool {
private DicEnumPool() {
}
private static final Map<IDicItem, DicEnumBean> dictItemMap = new ConcurrentHashMap<>();
public static void putDictItem(IDicItem item, String code, String text) {
dictItemMap.put(item, new DicEnumBean(code, text));
}
public static void putDictItem(IDicItem item, Integer code, String text) {
dictItemMap.put(item, new DicEnumBean(code, text));
}
public static DicEnumBean getDictItem(IDicItem iDictItem) {
return dictItemMap.get(iDictItem);
}
}
2.4 StudentEnum.java 学生常量类集合(分类管理)
package cn.proxx.common.dic.item.school;
import cn.proxx.common.dic.item.IDicItem;
public class StudentEnum {
public enum GenderEnum implements IDicItem<Integer> {
MAN(1, "男"),
WOMAN(2, "女"),
OTHERS(3, "其他");
GenderEnum(Integer code, String text) {
putDicItem(code, text);
}
}
public enum ClassEnum implements IDicItem<String> {
MAIN("A", "重点班"),
CUSTOM("B", "普通班"),
FISH("C", "杂鱼班");
ClassEnum(String code, String text) {
putDicItem(code, text);
}
}
}
2.5 EnumTest.java 测试用例(检验成果)
package cn.proxx.common.dic;
import cn.proxx.common.dic.item.school.StudentEnum;
import org.junit.Test;
public class EnumTest {
@Test
public void dic() {
DicEnumBean gender = DicEnumPool.getDictItem(StudentEnum.GenderEnum.MAN);
System.out.println("Code=" + gender.code);
System.out.println("Text=" + gender.text);
DicEnumBean clazz = DicEnumPool.getDictItem(StudentEnum.ClassEnum.FISH);
System.out.println("Code=" + clazz.code);
System.out.println("Text=" + clazz.text);
}
}
/**
控制台输出
Code=1
Text=男
Code=C
Text=杂鱼班
Process finished with exit code 0
**/