Java枚举类使用

Java枚举类型使用

平时我们在开发过程中,创建一个类的时候,会有如下四种:
在这里插入图片描述

  • Class:类
  • Interface:接口
  • Enum:枚举
  • Annotation:注解

​ 今天主要介绍一下Enum(枚举)的使用。枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在日常生活中很常见,例如表示星期、颜色等都是一个枚举。类似这种当一个变量有几种固定可能得取值时,就可以将它定义为枚举类型

概念

​ 被enum关键字修饰的类型就是枚举类型。如果枚举不添加任何方法,枚举值默认从0开始的有序数值。使用枚举可以将常量组织起来,统一进行管理。枚举的本质是java.lang.Enum的子类。

方法

  • values()返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。
  • name()返回实例名
  • ordinal()返回实例声明时的次序,从0开始。
  • valueOf()方法返回指定字符串值的枚举常量,不存在的会报错

情形一:枚举型常量

//枚举类 Java 枚举类使用 enum 关键字来定义
public enum ColorType {
    //各个常量使用逗号" , "来分割,结尾使用分号";"结束。根据Java命名约定,建议我们用全大写字母命名常量
    RED,WHITE,BLACK,BLUE;
}
//测试类
public class Test {
    public static void main(String[] args) {
        //1、values()返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。
        ColorType[] values = ColorType.values();
        for (ColorType value : values) {
            System.out.println(value);
            //2、name()返回实例名
            System.out.println(value.name());
            //3、ordinal()返回实例声明时的次序,从0开始。
            System.out.println(value.ordinal());
            System.out.println("--------------");
        }
        //4、valueOf()方法返回指定字符串值的枚举常量,不存在的会报错
        System.out.println(ColorType.valueOf("RED"));
        System.out.println(ColorType.valueOf("YELLOW"));
    }
}

结果打印如下:
在这里插入图片描述

情形二、带参数的枚举

//枚举类
public enum ColorType {

    /**
     * 枚举中的第一行应该是常量列表,然后是其他内容,如方法、变量和构造函数。
     * Java不允许使用 = 为枚举常量赋值。enum可以通过方法来显式赋值
     */
    RED("红色"),
    WHITE("白色"),
    BLACK("黑色"),
    BLUE("蓝色");

    private String name;

    ColorType(String name){
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        //1、values()返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。
        ColorType[] values = ColorType.values();
        for (ColorType value : values) {
            System.out.println(value);
            //2、name()返回实例名
            System.out.println(value.name());
            //3、ordinal()返回实例声明时的次序,从0开始。
            System.out.println(value.ordinal());
            System.out.println("--------------");
        }
        //4、valueOf()方法返回指定字符串值的枚举常量,不存在的会报错
        System.out.println(ColorType.valueOf("RED"));
        System.out.println(ColorType.valueOf("红色"));
    }
}

结果打印如下:
在这里插入图片描述

使用场景

if-else

public class Test {
    public static void main(String[] args) {
        //颜色中英文转换
        String color = "红色";
        if(ColorType.BLACK.toString().equals(color)){
            System.out.println(color+"对应的英文是:"+ColorType.BLACK.name());
        }else if(ColorType.RED.toString().equals(color)){
            System.out.println(color+"对应的英文是:"+ColorType.RED.name());
        }else if(ColorType.WHITE.toString().equals(color)){
            System.out.println(color+"对应的英文是:"+ColorType.WHITE.name());
        }else if(ColorType.BLUE.toString().equals(color)){
            System.out.println(color+"对应的英文是:"+ColorType.BLUE.name());
        }else{
            System.out.println("没有该颜色");
        }
    }
}

结果打印如下:
在这里插入图片描述

switch-case

public class Test {
    public static void main(String[] args) {
        //颜色中英文转换
        String color = "RED";
        switch(color){
            case "BLACK":
                System.out.println(color+"对应的中文是:"+ColorType.valueOf(ColorType.BLACK.name()));
                break;
            case "RED":
                System.out.println(color+"对应的中文是:"+ColorType.valueOf(ColorType.RED.name()));
                break;
            case "WHITE":
                System.out.println(color+"对应的中文是:"+ColorType.valueOf(ColorType.WHITE.name()));
                break;
            case "BLUE":
                System.out.println(color+"对应的中文是:"+ColorType.valueOf(ColorType.BLUE.name()));
                break;
            default:
                break;
        }
    }
}

结果打印如下:

在这里插入图片描述

enum类改进

上述两种写法当enum中常量较多时显得代码过于冗余。我们可以利用values()方法对enum类进行改造

//枚举类
public enum ColorType {

    /**
     * 枚举中的第一行应该是常量列表,然后是其他内容,如方法、变量和构造函数。
     * Java不允许使用 = 为枚举常量赋值。enum可以通过方法来显式赋值
     */
    RED("RED","红色"),
    WHITE("WHITE","白色"),
    BLACK("BLACK","黑色"),
    BLUE("BLUE","蓝色");

    ColorType(String code, String name) {
        this.code = code;
        this.name = name;
    }

    private String code;

    private String name;


    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;
    }

    public static String getNameByCode(String code){
        ColorType[] values = ColorType.values();
        for(ColorType colorType:values){
            if(code.equals(colorType.getCode())){
                return colorType.getName();
            }
        }
        return null;
    }

    public static String getCodeByName(String name){
        ColorType[] values = ColorType.values();
        for(ColorType colorType:values){
            if(name.equals(colorType.getName())){
                return String.valueOf(colorType.getCode());
            }
        }
        return null;
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        //颜色中英文转换
        String color = "RED";
        System.out.println(ColorType.getNameByCode(color));
    }
}

结果打印如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值