通常情况下,在表达某些特定字段、参数时,使用定义常量来表达时,很难明确表达出字段、参数意义,代码可读性很差。

enum枚举应用

/**
 * 订单类
 */
public class Order{
    /**
     * 订单编号
     */
    String orderNumber;
    /**
     * 支付方式
     * 0:微信app
     * 1:微信公众号
     * 2:支付宝app
     */
    Integer payType;
}

/**
 * 修改支付方式方法
 * @param orderNumber
 * @param payType
 */
public void updatePayType(String orderNumber,Integer payType){
    //业务逻辑
}

在对于updatePayType(String orderNumber,Integer payType)的调用者来说,参数payType就不友好,此处容易传错。

换成枚举看看:

/**
 * 支付类型
 */
public enum  PayTypeEnum{
    //定义元素
    WECHA_APP(0),WECHA_PUB(1),ALIPAY_APP(2);
    int value;

    PayTypeEnum(int value) {
        this.value = value;
    }
    public int getValue() {
        return value;
    }
}

方法参数改为:updatePayType(String orderNumber,PayTypeEnum payType)

/**
 * 修改支付方式
 * @param orderNumber
 * @param payType
 */
public void updatePayType(String orderNumber,PayTypeEnum payType){
    //业务逻辑
}

调用时:updatePayType("1234",PayTypeEnum.ALIPAY_APP);可读性提高了,后期维护也更方便。

进一步优化,可以把Order类中的payType字段换成PayTypeEnum 枚举类型。

/**
 * 订单类
 */
public class Order{
    /**
     * 订单编号
     */
    String orderNumber;
    /**
     * 支付方式
     */
    PayTypeEnum payType;

    public void setPayType(PayTypeEnum payType) {
        this.payType = payType;
    }
}

一、枚举的多样玩法

1、基础版

/**
 * 颜色列举
 */
public enum  ColorEnum{
    RED,YELLOW,BLUE,
}

public static void main(String[] args) {
    System.out.println(ColorEnum.BLUE);//输出:BLUE
    //valueOf(String name)根据元素名称获取元素
    System.out.println(ColorEnum.valueOf("YELLOW"));//输出:YELLOW
    // values() 返回所有ColorEnum元素
    System.out.println(ColorEnum.values()[0]);//输出:RED
}

2、渐进版

/**
 * 支付类型
 */
public enum  PayTypeEnum{
    //定义元素
    WECHA_APP(0),WECHA_PUB(1),ALIPAY_APP(2);
    int value;

    PayTypeEnum(Integer value) {
        this.value = value;
    }
    public int getValue() {
        return value;
    }
}
public static void main(String[] args) {
    System.out.println(PayTypeEnum.ALIPAY_APP);//输出:ALIPAY_APP
    System.out.println(PayTypeEnum.ALIPAY_APP.getValue());//输出:2
}

3、增强版

/**
 * 支付类型
 */
public enum PayTypeEnum {
    //定义元素
    WECHA_APP(0, "微信app"), WECHA_PUB(1, "微信公众号"), ALIPAY_APP(2, "支付宝app");
    Integer value;
    String name;
    PayTypeEnum(Integer value, String name) {
        this.value = value;
        this.name = name;
    }

    public int getValue() {
        return value;
    }

    public String getName() {
        return name;
    }
}

public static void main(String[] args) {
    System.out.println(PayTypeEnum.ALIPAY_APP);//输出:ALIPAY_APP
    System.out.println(PayTypeEnum.ALIPAY_APP.getValue());//输出:2
    System.out.println(PayTypeEnum.ALIPAY_APP.getName());//输出:支付宝app
}

相关文章: