枚举类去掉ifelse
一般我们在数据库中存储1,2或a,b等简单的字符来代表一些类型,比如对性别:1代表男,2代表女。而这种就需要在代码里面判断。
//接收参数
String receiveSax="";
//返回参数
String returnSax="";
if("1".equals(receiveSax)){
returnSax="男";
}
else if ("2".equals(receiveSax))
{
returnSax="女";
}
而一旦其中的类型变化,我们就要修改业务逻辑的代码,代码即臃肿又不利于维护。
//接收参数
String receiveSax="";
//返回参数
String returnSax="";
if("1".equals(receiveSax)){
returnSax="男";
}
else if ("2".equals(receiveSax))
{
returnSax="女";
}
else if ("3".equals(receiveSax)) {
returnSax="人妖";
}
public enum GenderEnum
{
M("1", "男"),
WM("2", "女");
// 成员变量
private String code;
private String name;
// 构造方法
private GenderEnum(String code, String name) {
this.code = code;
this.name = name;
}
// 根据code获取name
public static String getNameByCode(String code) {
for (GenderEnum n : GenderEnum.values()) {
if (n.getCode().equals(code)) {
return n.name;
}
}
return "";
}
public String getCode()
{
return code;
}
public void setCode(String code)
{
this.code = code;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
//假设receiveSax为已知
String receiveSax="";
String returnSax = GenderEnum.getNameByCode(receiveSax);
当我们新增一个类型的时候只需在枚举类里面新增即可,不需要修改业务逻辑的代码。多种类型时可以新建多个枚举类,放在同一包下。
下面是自定义枚举类的一个公共方法,其实不用重新写,在org.apache.commons.lang.enums.EnumUtils已经帮我们封装好,可根据需要使用。
public class EnumsUtils
{
/**
* 根据索引获取枚举类的值
*
* @param <T>
* @param clazz
* @param ordinal
* @return
*/
public static <T extends Enum<T>> T valueOf(Class<T> clazz, int index)
{
return (T)clazz.getEnumConstants()[index];
}
/**
* 根据name获取枚举类的值
*
* @param <T>
* @param enumType
* @param name
* @return
*/
public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
{
return (T)Enum.valueOf(enumType, name);
}
/**
* 获取所有枚举类
*
* @param <T>
* @param clazz
* @param ordinal
* @return
*/
public static <T extends Enum<T>> T[] valueOf(Class<T> clazz)
{
return clazz.getEnumConstants();
}
}