参考: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));
}
}