枚举作为常量类使用多种方式、前后端分离使用;为了前端 统一调用,特别使用了接口以及枚举反射,将枚举工具类作为标签开放于前端;保证多个枚举常量类,不用建立一个枚举类处理。
如果后台一般使用可以使用枚举里面自定义静态方法,当然一般情况下使用不到,如果需要最好各自将需用的枚举类里面自定义方法使用。保证一定的效率性。
如果不想使用反射的小伙伴,可将所有的状态类加入一个枚举类;也可使用多个枚举类;将枚举类作为标签提供于前端使用。
/*
* @Description TODO 枚举接口类
* @return
* @Date 2020/6/3 10:59
* @Author yangtao
*/
public interface IStatusEnum {
Object getValue();
int getIntValue();
String getDesc();
Object getType();
}
/**
* @ClassName OrderStatus
* @Description 订单相关状态枚举
* @Author yangtao
* @Date 2020/5/28 14:58
* @Version V1.0
**/
public enum OrderStatus implements IStatusEnum{
//订单状态
Status,
Status0(0,"待付款",Status),
Status1(1,"待发货",Status),
Status2(2,"待收货",Status),
private Object value;//值
private String desc;//描述
private OrderStatus type;//类型
OrderStatus() {
}
OrderStatus(Object value, String desc, OrderStatus type) {
this.value = value;
this.desc = desc;
this.type = type;
}
public String getDesc() {
return desc;
}
public Object getValue() {
return value;
}
public int getIntValue() {
return Integer.parseInt(value.toString());
}
public String getStrValue() {
return value.toString();
}
public OrderStatus getType() {
return type;
}
/*
* @Description TODO 根据枚举常量类型 获取枚举值集合
* @param typeName 枚举类型名称
* @return java.util.Map
* @Date 2020/6/3 11:09
* @Author yangtao
*/
public static Map findEnumList(OrderStatus type) {
Map map = new HashMap<>();
for (OrderStatus ts : OrderStatus.values()) {
if (type.equals(ts.getType())) {
map.put(ts.getValue().toString(), ts.getDesc());
}
}
//第二种使用EnumSet
// EnumSet currEnumSet = EnumSet.allOf(OrderStatus.class);
// for (OrderStatus ts : currEnumSet) {
// if (type.equals(ts.getType())) {
// map.put(ts.getValue().toString(), ts.getDesc());
// }
// }
return map;
}
/*
* @Description TODO 根据类型和值获取描述
* @param type 类型
* @param value 值
* @return String
* @Date 2020/6/3 14:01
* @Author yangtao
*/
public static String findEnumDescByValue(OrderStatus type, Object value){
String desc = "";
for (OrderStatus ts : OrderStatus.values()) {
if(type.equals(ts.getType())&&ts.getValue().toString().equals(value.toString())){
desc = ts.getDesc();
break;
}
}
return desc;
}
}
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/*
* @Description TODO 订单相关状态静态工具类
* @return
* @Date 2020/5/28 15:27
* @Author yangtao
*/
public class StatusEnumUtil {
private static final String packageName = "com.enums.";
/*
* @Description TODO 反射获取枚举接口
* @param className 枚举名称
* @return IStatusEnum[]
* @Date 2020/6/3 11:04
* @Author yangtao
*/
private static IStatusEnum[] getEnumValues(String className){
try {
//这里的typeName就是枚举对象的名称,是需要写全路径的,注意小数点别少写了
Class> c = Class.forName(packageName+ className);
//Class.getEnumConstants() 返回类中声明的枚举实例 即:枚举对象.values();
return (IStatusEnum[]) c.getEnumConstants();
//第二种通过method获得枚举的遍历方法 即:枚举对象.values()
// Method method = c.getMethod("values");
// return (IStatusEnum[]) method.invoke(null);
} catch (Exception e) {
e.printStackTrace();
System.out.println("枚举类不存在");
}
return null;
}
/*
* @Description TODO 根据枚举常量类型 获取枚举值集合
* @param className 枚举类名
* @param typeName 枚举类型名称
* @return java.util.Map
* @Date 2020/6/3 11:09
* @Author yangtao
*/
public static Map findEnumList(String className,String typeName) {
Map map = new HashMap<>();
IStatusEnum inter[] = getEnumValues(className);
if(inter!=null && inter.length>0){
for (IStatusEnum o : inter) {
if(o.getType()!=null && typeName.equals(o.getType().toString())) {
map.put(o.getValue(), o.getDesc());
System.out.println(o.getDesc()+o.getValue()+o.getType());
}
}
}
return map;
}
/*
* @Description TODO 根据枚举常量类型和枚举值 获取描述
* @param className 枚举类名
* @param typeName 枚举类型名称
* @param value 枚举值
* @Date 2020/6/3 11:16
* @Author yangtao
*/
public static String findEnumDescByValue(String className,String typeName,Object value){
String desc = "";
IStatusEnum inter[] = getEnumValues(className);
if(inter!=null && inter.length>0 && typeName!=null && value!=null){
for (IStatusEnum o : inter) {
if(o.getType()!=null && typeName.equals(o.getType().toString())) {
if(value.toString().equals(o.getValue().toString())) {
desc = o.getDesc();
}
}
}
}
return desc;
}
public static void main(String[] args) {
findEnumList("OrderStatus","Status");
System.out.println(findEnumDescByValue("OrderStatus","Status",3));
// OrderStatus.findEnumList(OrderStatus.Status);
// System.out.println(OrderStatus.findEnumDescByValue(OrderStatus.Status,3));
}
}