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


当然我们还可以用Map的方式,例如下面这段代码


public static String getSexStatus(String areaKey){
        
        Map<String, String> SexStatus= new HashMap<String,String>(){
            {
                put("1", "男");
                put("2", "女");
            }
        };
        
        return SexStatus.containsKey(areaKey) == false ? "" : SexStatus.get(areaKey);
    }



Java中,多重if else if语句可以通过以下几种方式进行优化: 1.使用switch语句代替多重if else if语句。switch语句可以根据一个表达式的值,跳转到匹配的case语句执行,从而提高程序的执行效率。但是,switch语句只能用于判断整型、字符型和枚举类型的值,不能用于判断浮点型、布尔型和字符串类型的值。 2.将最可能出现的情况放在前面。在多重if else if语句中,如果某个条件的出现概率比其他条件高,那么就应该将这个条件放在前面,这样可以减少程序的判断次数,提高效率。 3.使用布尔变量代替多重if else if语句。如果多重if else if语句中的条件比较复杂,可以将每个条件的结果保存在一个布尔变量中,然后使用一个if语句判断这些布尔变量的值,从而简化程序的结构,提高可读性。 4.使用多态代替多重if else if语句。如果多重if else if语句中的条件是对象的类型,可以使用多态来代替这些条件,从而提高程序的可扩展性和可维护性。 以下是一个使用switch语句代替多重if else if语句的例子: ```java int day = 3; String dayName; switch (day) { case 1: dayName = "Monday"; break; case 2: dayName = "Tuesday"; break; case 3: dayName = "Wednesday"; break; case 4: dayName = "Thursday"; break; case 5: dayName = "Friday"; break; case 6: dayName = "Saturday"; break; case 7: dayName = "Sunday"; break; default: dayName = "Invalid day"; break; } System.out.println(dayName); // 输出:Wednesday ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值