首页 > 编程语言 >java 枚举的使用

java 枚举的使用

时间:2022-09-25 23:55:56浏览次数:46  
标签:ordinal java TempSize 枚举 使用 Small tempSizes Size

一、枚举的介绍,以如下的枚举为例子进行介绍

enum Size {
    Small, Medium, Large, ExtraLarge;
}

如上的声明定义了一个类,它有4个实例不可能再构造出新的对象,即:Size size = new Size(); 编译时不会通过的

既然枚举是一个类,那么他有什么特殊的方法呢?

1、toString()

如上如果想要获取Small对应的字符串“Small”,那么可以用toString的方式获得: Size.Small.toString()

2、valueOf()

与toString相对应的是valueOf的使用,如果想要获取Size的Small,那么可以通过valueOf的方式获得:Size.valueOf("Small")

如果输入的是Size中不存在的枚举会如何呢? 会抛出异常:IllegalArgumentException

3、ordinal()

这个函数获取的是枚举常量的位置,从0开始计数;比如要获取Large的ordinal:Size.Large.ordinal()

4、compareTo()

比较两个枚举值的大小(其实是比较两个枚举值的ordinal)

    public final int compareTo(E var1) {
        if (this.getClass() != var1.getClass() && this.getDeclaringClass() != var1.getDeclaringClass()) {
            throw new ClassCastException();
        } else {
            return this.ordinal - var1.ordinal;
        }
    }

如上所示,是本身的ordinal跟var1.ordinal的差值,所以相等返回0,比他大返回大于0反之返回小于0

5、values()

获取所有的枚举,则可以用values来获取。比如获取Size的所有枚举:Size.values(); 返回的是一个按照ordinal顺序排列的数组:[Size.Small, Size.Medium, Size.Large, Size.ExtraLarge]

 

二、关于枚举使用简写

有时候我们在命名的时候写了一串很长的名字,但是我们显示给用户的时候希望只是一个简短的字符串,那么可以通过使用枚举简写的方式

enum FlagSize {
    Small("S"), Big("B");

    String flag;
    private FlagSize(String flag) { this.flag = flag;}

    public String getFlag() {return flag;}
}

如上所示,将Small简写为"S", big简写为B

接一中的第一点,枚举的构造都是private,所以这里重写FlagSize的构造函数只能是private,因为Small和Big是FlagSize的实例,所以“S”和“B”是构造的时候传给flag的参数

那么我们在获取简写的时候可以通过getFlag()来获取。

 

三、在实际工作中遇到的问题

遇到这么一个情况:有两个枚举类她们的枚举名字是一样的并且排列的位置也是一样的;

那么一个的枚举值该如何转换成另外一个枚举的枚举值

enum Size {
    Small, Medium, Large, ExtraLarge;
}

enum TempSize {
    Small, Medium, Large, ExtraLarge;
}

一种是将TempSize转化为String,然后Size对应的枚举值转换为String再在TempSize对应的ArrayList<String>中查找即

        TempSize[] tempSizes = TempSize.values();
        ArrayList<String> lstTempSizes = new ArrayList<>(tempSizes.length);
        for (TempSize tempSize : tempSizes) {
            lstTempSizes.add(tempSize.toString());
        }
        int index = lstTempSizes.indexOf(size.toString());

这里再通过index获取到对应tempSizes中的TempSize

 

另一种是通过ordinal的方式

        TempSize[] tempSizes = TempSize.values();
        TempSize tempSize = tempSizes[size.ordinal()]; // 这里需要提前判断ordinal是否在tempSizes的范围内否则会越界

很明显,第二种使用ordinal的方式比较简单

标签:ordinal,java,TempSize,枚举,使用,Small,tempSizes,Size
From: https://www.cnblogs.com/czwlinux/p/16729445.html

相关文章

  • 在Intellij IDEA中使用Debug
    Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟......
  • JadConfig 注解驱动的java 配置管理包
    JadConfig是graylog开源的一个基于注解驱动的java配置管理包,graylogserver对于配置的管理就是使用了此包JadConfig使用比较简单,但是功能还是很强大的,配置包含了校......
  • java入门:Hello,World
    卸载卸载JDK删除java的安装目录删除JAVAHOME删除path下关于java的目录java-version安装JDK百度搜索JDK8,找到下载地址同意协议下载电脑对应的版......
  • Java的结构
    顺序结构Java基本结构就是顺序结构,除非特别指明,否则依次执行顺序结构是最简单的算法结构packagecom.tea.struct;​publicclassShunXuDemo01{  publicsta......
  • 自我总结的git的使用
    git是什么git是一个分布式版本控制工具,github是代码托管平台。git有什么用保存文件的所有修改记录使用版本号进行区分随时可浏览历史版本记录可还原到历史指......
  • javaScript-2 字符串处理
    字符串处理字符串处理<!DOCTYPEhtml><html><head><title>字符串处理</title></head><body><h1>字符串处理</h1>原始字符串:<spanid="orig......
  • 零钱通项目(java)
    1.项目需求说明使用Java开发零钱通项目,可以完成收益入账,消费,查看明细,退出系统等功能。2.项目的界面化繁为简先完成显示菜单,并可以选择完成零钱通明细.......
  • Java基础语法 三元运算符
    格式优先级packageBasicGrammar.day03;/*运算符之五:位运算符(了解)结论:1.位运算符操作的都是整型的数据2.<<:在一定范围内,每向左移1位,相当于*2>>:在一......
  • 使用github时遇到的一些问题与解决办法
    fatal:unabletoaccess‘https://github.com/.../.git/‘:参见:https://blog.csdn.net/xyaicwj/article/details/125256149......
  • ::before与::after的使用
    今天介绍在前端开发中,会使用到的伪元素::before和::after介绍两个主要的作用1.在标签前面或者后面添加元素 例子1:使用::before和::after在标签前添加线条观察上面......