java 枚举中放了多个不同的枚举前缀,取相应前缀的枚举方法

日期:2021-12-09 1208 星期四

需求:一个枚举类中,放入2个不同的,前缀不样的枚举,需要把相应的枚举code-name,取出来,后面根据相应的code,取name

订单状态枚举
主订单的状态:ORDER_MAIN_STATUS【前缀】
子订单的状态:ORDER_SUB_STATUS【前缀】

package org.springblade.common.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;

/**
 * 订单状态枚举
 * @Author 
 * @Date 2021/11/28
 * @Version 1.0
 */
@Getter
@AllArgsConstructor
public enum OrderStatusEnum {
	//主订单的状态
	ORDER_MAIN_STATUS_PAID("待支付",0),
	ORDER_MAIN_STATUS_HANDLE("订单处理中",1),
	ORDER_MAIN_STATUS_CLOSED("订单关闭",2),
	ORDER_MAIN_STATUS_COMPLETE("订单完成",3),
	//子订单的状态
	ORDER_SUB_STATUS_PAID("待支付",0),
	ORDER_SUB_STATUS_PAID_OFF("待发货",1),
	ORDER_SUB_STATUS_SHIPPED("已发货",2),
	ORDER_SUB_STATUS_COMPLETE("已完成",3),
	ORDER_SUB_STATUS_CANCELLED("已取消",4),
	ORDER_SUB_STATUS_AFTER_SERVICE("已退款",5),
	//未定义的状态,add,2021-12-09
	ORDER_STATUS_UNDEFINED("",-1);

	String name;
	int value;
	/*
	 * 获得的未定义的举值-Name
	 * @author 
	 * @date 2021/12/9
	 * @return
	 */
	public static String getUndefinedName(){
		return OrderStatusEnum.ORDER_STATUS_UNDEFINED.getName();
	}
	/*
	 * 获得的未定义的举值-code
	 * @author
	 * @date 2021/12/9
	 * @return
	 */
	public static int getUndefinedCode(){return OrderStatusEnum.ORDER_STATUS_UNDEFINED.getValue();}

	/**
	 *获得相应-前缀一样的-所有的枚举值
	 * @author
	 * @date 2021/12/9
	 * @param mainOrSub 1=订单主状态-枚举,2=订单子状态-枚举,其它传入无效,只是一个空Map
	 * @return
	 */
	public static HashMap<Integer,String> getEnumData(int mainOrSub){
		HashMap<Integer,String> map = new HashMap<Integer,String>();
		if( mainOrSub != 1 && mainOrSub != 2){
			return map;
		}
		for(OrderStatusEnum e : OrderStatusEnum.values()){
			switch (mainOrSub) {
				case 1:
					if(e.name().startsWith("ORDER_MAIN_STATUS"))	map.put(e.getValue(),e.getName());
					break;
				case 2:
					if(e.name().startsWith("ORDER_SUB_STATUS")) 	map.put(e.getValue(),e.getName());
					break;
			}
		}
		return map;
	}
}
class Test {
	public static void main(String[] args) {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//日期格式化
		String  date = df.format(new Date());
		String msg = "[系统时间:" + date + "] ";
		System.out.println(msg + "入口.main");
		int size = 4;
		for (int i = 0; i < size ; i++) {
			int mainOrSub = i;
			HashMap<Integer,String> map = OrderStatusEnum.getEnumData(mainOrSub);
			System.out.println(msg + "for:"+ (i+1) + "/" + size + "," + i
					+ ",[1-主状态,2-子状态,其它值-无数据]:"
					+ "," + mainOrSub  + ",数据:" + map.toString());
		}

	}
}

控制台-输出

[系统时间:2021-12-09 12:03:26] 入口.main
[系统时间:2021-12-09 12:03:26] for:1/4,0,[1-主状态,2-子状态,其它值-无数据],0,数据:{}
[系统时间:2021-12-09 12:03:26] for:2/4,1,[1-主状态,2-子状态,其它值-无数据],1,数据:{0=待支付, 1=订单处理中, 2=订单关闭, 3=订单完成}
[系统时间:2021-12-09 12:03:26] for:3/4,2,[1-主状态,2-子状态,其它值-无数据],2,数据:{0=待支付, 1=待发货, 2=已发货, 3=已完成, 4=已取消, 5=已退款}
[系统时间:2021-12-09 12:03:26] for:4/4,3,[1-主状态,2-子状态,其它值-无数据],3,数据:{}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过在枚举类中添加一个方法,该方法返回一个字符串,包含所有属性的使用提示。具体实现步骤如下: 1. 在枚举类中添加一个静态方法,例如getValuesPrompt()。 2. 在getValuesPrompt()方法中遍历枚举类中的所有属性,将属性的使用提示和实际用进号分割,并拼接成一个字符串。 3. 在需要展示属性使用提示的地方调用getValuesPrompt()方法,即可获所有属性的使用提示。 例如,假设有一个枚举类Season,其中包含四个属性:SPRING、SUMMER、FALL、WINTER。现在要增加使用提示,显示和实际之间用进号分割,可以按照以下步骤实现: ```java public enum Season { SPRING("春天"), SUMMER("夏天"), FALL("秋天"), WINTER("冬天"); private String name; private Season(String name) { this.name = name; } public String getName() { return name; } public static String getValuesPrompt() { StringBuilder sb = new StringBuilder(); for (Season s : Season.values()) { sb.append(s.getName()).append("→").append(s.toString()).append("、"); } sb.deleteCharAt(sb.length() - 1); return sb.toString(); } } ``` 在上述代码中,getValuesPrompt()方法返回一个字符串,其中包含所有属性的使用提示。例如,调用Season.getValuesPrompt()方法,返回的字符串为"春天→SPRING、夏天→SUMMER、秋天→FALL、冬天→WINTER",即每个属性的使用提示和实际之间用"→"符号分割,多个属性之间用"、"符号分割。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值