枚举类去掉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();
    }
    
}




posted on 2017-01-22 09:14  不以物喜,不已己悲  阅读(227)  评论(0编辑  收藏  举报

导航