定义枚举接口类。
// Enum 枚举的 公共接口
public interface EnumManager {
Integer getState();
String getName();
}
枚举类。
//
public enum AssetSource implements EnumManager {
SOURCE_BUY(1, "购入"),
SOURCE_RENT(2, "租赁");
private final Integer state;
private final String name;
AssetSource(Integer state, String name) {
this.state = state;
this.name = name;
}
public Integer getState() {
return state;
}
public String getName() {
return name;
}
}
//
public enum AssetState implements EnumManager {
STATE_PLACE(1, "闲置"),
STATE_BORROW(2, "借用");
private final Integer state;
private final String name;
AssetState(Integer state, String name) {
this.state = state;
this.name = name;
}
public Integer getState() {
return state;
}
public String getName() {
return name;
}
}
枚举工具类和使用测试。
public class EnumUtil {
// 获取 value
public static <T> String getName(Integer state, Class<T> cls) throws Exception {
Method method = cls.getMethod("values");
EnumManager inter[] = (EnumManager[]) method.invoke(null, null);
for (EnumManager enumManager : inter) {
if (state == enumManager.getState()) {
return enumManager.getName();
}
}
return "";
}
// 获取 key
public static <T> Integer getState(String name, Class<T> cls) throws Exception {
Method method = cls.getMethod("values");
EnumManager inter[] = (EnumManager[]) method.invoke(null, null);
for (EnumManager enumManager : inter) {
if (name.equals(enumManager.getName())) {
return enumManager.getState();
}
}
return -1;
}
public static void main(String[] args) throws Exception {
System.out.println(EnumUtil.getName(1, AssetSource.class));
System.out.println(EnumUtil.getState("购入", AssetSource.class));
System.out.println(EnumUtil.getName(1, AssetState.class));
System.out.println(EnumUtil.getState("闲置", AssetState.class));
}
}