【Java】- 枚举类型总结-应用场景

什么是枚举类型

  1. Java 枚举是一个特殊的类,一般表示一组常量,Java 枚举类使用 enum 关键字来定义,各个常量使用逗号来分割,public static final修饰的,最终以分号结束;
  2. 默认继承了java.lang.Enum,实现了java.lang.Comparable接口,且不能继承其他类,也不可以被继承。但枚举类可以实现一个或多个接口。
  3. 枚举类的所有实例必须放在第一行显示,不需要new出实例,不需显示调用构造方法。
    4.构造方法:私有的,默认的就是private
/**
 * <b>功能描述:颜色类型</b><br>
 * @author newzhong
 * @version 1.0.0
 * @since JDK 1.8
 *
 * @Note
 * <b>创建时间:</b> 2021-01-03 13:39 
 */
public enum ColorEnum {
    RED(1,"红色"),
    YELLOW(2,"黄色");
    private final Integer ColorCode;
    private final String colorValue;

    ColorEnum(Integer colorCode, String colorValue) {
        ColorCode = colorCode;
        this.colorValue = colorValue;
    }

    public Integer getColorCode() {
        return ColorCode;
    }

    public String getColorValue() {
        return colorValue;
    }
}

为什么使用枚举类型

  1. 代码优雅,提高可以读性,和可扩展性

使用的静态常量过多时,会造成混淆,如果需要添加新的字段直接在enum类里添加变量

  1. 类型安全
 private static final int RED = 1;

3.可以方便获取指定的变量,并且相当于一个接口。
4. 可以switch表达式中使用Enum定义的枚举类的对象作为表达式

枚举类的主要方法

方法名返回类型
values()返回当前枚举类的name属性,如果没有,则throw new java.lang.IllegalArgumentException()
ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
valueOf()方法返回指定字符串值的枚举常量。

应用场景:比如我们在数据库中存储的字段为12等等,其中1为红色,2为黄色,通过sql从数据库中查出的就是integer,此时我们需要获取转化为对应的颜色,一般来说通过编写大量的if或switch语句就可以解决这个问题,但是代码的可读性非常低,并且,当很多模块到使用时,如果一个字段发生更改,改起来非常痛苦,考虑开闭原则,可以扩展性,使用枚举类型时不错的选择,下面编写的方法只需要传出对应的值就可以转化为对应得值

/**
 * <b>功能描述:颜色类型</b><br>
 * @author newszhong
 * @version 1.0.0
 * @since JDK 1.8
 *
 * @Note
 * <b>创建时间:</b> 2021-01-03 13:39 
 */
public enum ColorEnum {
   /**属性及方法见上面*/
   // 迭代获取,通过传入的code转为对应的颜色value
    public static ColorEnum getValue(Integer colorCode){
        // 调用 values()获取枚举常量对象
        for (ColorEnum myVar : ColorEnum.values()) {
            if (colorCode.equals(myVar.getColorCode())){
                return myVar;
            }
        }
        return null;
    }
}

public class TestEnums {
    public static void main(String[] args) {
        ColorEnum value = ColorEnum.getValue(1);
        // 查看索引ordinal()
        int ordinal = value.ordinal();
        System.out.println("index:"+ordinal);
        
        String colorValue = value.getColorValue();
        System.out.println(colorValue);
    }
}

结果:

valueOf

 // 返回指定字符串值的枚举常量。
        ColorEnum red = ColorEnum.valueOf("RED");
        String colorValue = red.getColorValue();
        System.out.println(red+ ":" + colorValue);


不存在枚举常量时的结果:

    // 返回指定字符串值的枚举常量。
        ColorEnum red = ColorEnum.valueOf("RED11");
        String colorValue = red.getColorValue();
        System.out.println(red+ ":" + colorValue);

应用在Switch语句

    public static void main(String[] args) {
        // 应用于 switch 语句
        ColorEnum red = ColorEnum.RED;
        switch(red) {
            case RED:
                System.out.println("红色啊");
                break;
            case YELLOW:
                System.out.println("黄色啊啊啊");
                break;
            default:
                System.out.println("无");
        }
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值