枚举类的创建

参考:https://mp.weixin.qq.com/s/wSitsD10VcCg51OgKlHUnA


枚举类(enums)的创建
    文件位置一般放在各个项目中的enums文件夹,但是公用的可以放入common里
    
    1.创建接口

public interface BaseEnum<E extends Enum<?>, T> {
    
    T getValue();
}


    
    
    2.创建实体类实现接口

@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum StateEnum implements BaseEnum<StateEnum, Integer> {

	NOT_SUBMIT(0, "-", "-"),
	SUCCESS(1, "Success", "成功"),
	FAILED(2, "Failed", "失败");

	private final Integer code;
	
	private final String value;
	
	private final String cn;
	
	StateEnum(int code, String value, String cn) {
		this.value = code;
		this.en = en;
		this.cn = value;
	}
	

	// 一般到这里就结束了
	
	/**
	 * 通过code值获取value
	 *
	 * @param code code
	 * @return enum
	 */
	public static DerpStateEnum resovle(Integer code) {
		return Arrays.stream(values())
			.filter(status -> status.value.equals(code))
			.findAny()
			.orElseThrow(() -> new RuntimeException("Illegal code: " + code));
	}
}


    
枚举类的好处
    1.一般来说我们定义常量也可以解决问题,但是枚举类可以限制方法传参,给方法一个类型约束
    2.枚举用在switch语句中,意义更明确
    3.比如字段定义的一些状态,前端或者数据库都可以通过该枚举类型传值拿值

import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Asian, African and Latin American countries
 * 支持账号认证的亚非拉国家
 *
 */
@Getter
public enum AalaCountriesEnum {

    MY("MY", "马来西亚", "Malaysia", "+60"),
    HK("HK", "香港(中国)", "Hong Kong SAR China", "+852"),
    SG("SG", "新加坡", "Singapore", "+65"),
    TR("TR", "土耳其", "Turkey", "+90"),
    MX("MX", "墨西哥", "Mexico", "+52"),
    SA("SA", "沙特阿拉伯", "Saudi Arabia", "+966"),
    AE("AE", "阿联酋", "United Arab Emirates", "+971"),
    IQ("IQ", "伊拉克", "Iraq", "+964"),
    BY("BY", "白俄罗斯", "Belarus", "+375"),
    PE("PE", "秘鲁", "Peru", "+51"),
    CO("CO", "哥伦比亚", "Colombia", "+57"),
    ZA("ZA", "南非", "South Africa", "+27"),
    EG("EG", "埃及", "Egypt", "+20"),
    AZ("AZ", "阿塞拜疆", "Azerbaijan", "+994"),
    GE("GE", "格鲁吉亚", "Georgia", "+995"),
    AM("AM", "亚美尼亚", "Armenia", "+374"),
    KZ("KZ", "哈萨克斯坦", "Kazakhstan", "+7"),
    KG("KG", "吉尔吉斯斯坦", "Kyrgyzstan", "+996"),
    TJ("TJ", "塔吉克斯坦", "Tajikistan", "+992"),
    UZ("UZ", "乌兹别克斯坦", "Uzbekistan", "+998"),
    TM("TM", "土库曼斯坦", "Turkmenistan", "+993"),
    MN("MN", "蒙古", "Mongolia", "+976"),
    UA("UA", "乌克兰", "Ukraine", "+380"),
    PA("PA", "巴拿马", "Panama", "+507"),
    DO29("DO", "多米尼加", "Dominican Republic", "+1829"),
    DO09("DO", "多米尼加", "Dominican Republic", "+1809"),
    DO49("DO", "多米尼加", "Dominican Republic", "+1849"),
    CR("CR", "哥斯达黎加", "Costa Rica", "+506"),
    GT("GT", "危地马拉", "Guatemala", "+502"),
    HN("HN", "洪都拉斯", "Honduras", "+504"),
    SV("SV", "萨尔瓦多", "El Salvador", "+503"),
    BO("BO", "玻利维亚", "Bolivia", "+591"),
    CL("CL", "智利", "Chile", "+56"),
    OM("OM", "阿曼", "Oman", "+968"),
    QA("QA", "卡塔尔", "Qatar", "+974"),
    KW("KW", "科威特", "Kuwait", "+965"),
    BH("BH", "巴林", "Bahrain", "+973"),
    JO("JO", "约旦", "Jordan", "+962"),
    YE("YE", "也门", "Yemen", "+967"),
    LB("LB", "黎巴嫩", "Lebanon", "+961")
    ;

    private final String alphaCode;

    private final String cnName;

    private final String enName;
    
    private final String areaCode;

    AalaCountriesEnum(String alphaCode, String cnName, String enName, String areaCode) {
        this.alphaCode = alphaCode;
        this.cnName = cnName;
        this.enName = enName;
        this.areaCode = areaCode;
    }

    /**
     * 获取支持账号认证的亚非拉国家的区号
     * @return List<String>
     */
    public static List<String> toAreaCodeList() {
        List<String> areaCodeList = new ArrayList<>();
        for (AalaCountriesEnum aalaCountriesEnum : AalaCountriesEnum.values()) {
            areaCodeList.add(aalaCountriesEnum.getAreaCode());
        }
        return areaCodeList;
    }

    /**
     * 获取支持账号认证的亚非拉国家的AlphaCode码
     * @return List<String>
     */
    public static List<String> toAlphaCodeList() {
        List<String> alphaCodeList = new ArrayList<>();
        for (AalaCountriesEnum aalaCountriesEnum : AalaCountriesEnum.values()) {
            alphaCodeList.add(aalaCountriesEnum.getAlphaCode());
        }
        return alphaCodeList;
    }

    /**
     * 通过区号获取对应枚举
     *
     * @param value value
     * @return enum
     */
    public static AalaCountriesEnum getEnumByValue(String value) {
        return Arrays.stream(AalaCountriesEnum.values())
                .filter(state -> StringUtils.equals(value, state.getAreaCode()))
                .findAny()
                .orElseThrow(
                        () -> new ArgsException(ExceptionEnum.NO_ENUM_CONSTANT, AalaCountriesEnum.class.getSimpleName(), value));
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值