>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 32420 个阅读者 刷新本主题
 * 贴子主题:  Java中如何由枚举常量的ordinal值获得枚举常量对象 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2019-04-04 23:14:20     消息  查看  搜索  好友  邮件  复制  引用

Java语言提供了关键字enum,可以通过该关键字方便得定义自己需要的枚举类型,比如

enum Season {
    SPRING, SUMMER, AUTUMN, WINTER
}
就定义了一个季节枚举类型。

在本例中,对于Season.SPRING这个对象,Season.SPRING.name()可以得到该对象的字符串,即“SPRING”;反之,由Season.valueOf(“SPRING”)则可以得到该对象,即Season.SPRING。也就是说,使用name()方法和valueOf(String)方法可以在枚举类型对象和字符串之间方便得转换。当然,如果valueOf(String)方法的参数不是该枚举类型合法的字符串,则会抛出IllegalArgumentException异常。

对于枚举类型,Java内部实际上还是转换为java.lang.Enum的子类,可以通过“javap -c Season”命令反编译来观察这一点。Enum类提供了一个ordinal()方法,用来返回枚举对象的序数,比如本例中SPRING, SUMMER, AUTUMN, WINTER的序数就分别为0, 1, 2, 3。在有些情况下,我们需要使用这个序数,而且还有可能再根据这个序数生成所需要的枚举对象,可是Enum并没有提供valueOf(int)这样的方法,那是不是就做不到呢?

对于这个问题,实际上可以利用枚举类型的values()方法间接的做到。values()方法返回一个枚举对象数组,比如本例就是Season[],数组元素按照序数排列。在自定义的枚举类型中,我们只要定义自己的valueOf(int)方法,并返回该数组下标对象的对象就可以了。代码如下:
enum Season {
    SPRING, SUMMER, AUTUMN, WINTER;
    public static Season valueOf(int ordinal) {
        if (ordinal < 0 || ordinal >= values().length) {
            throw new IndexOutOfBoundsException("Invalid ordinal");
        }
        return values()[ordinal];
    }
}
怎么样,还是挺简单的吧?

转自:https://blog.csdn.net/brooksychen/article/details/3342446



程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->操作符
  JavaWeb开发-->面向对象开发方法概述之UML语言(下)
  JSP与Hibernate开发-->Servlet技术详解(Ⅲ)
  Java网络编程-->Web运作原理(Ⅳ)
  精通Spring-->
  Vue3开发-->使用JPA和注解
  Navigating Cultural Stigma as a Proud Doll Owner
  [求助] 如何观看孙老师的课程视频
  利用堆栈将中缀表达式转换成后缀表达式
  Java虚拟机进行类连接的原理
  用VisualVM远程监控Java进程
  害怕面试被问HashMap?
  java中的Static、final、Static final各种用法
  使用javaNIO实现C/S模式的通信
  正则表达式范例
  用BigDecimal进行精确运算的范例
  java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍
  Java入门实用代码:线程状态监测
  Java入门实用代码:查看线程是否存活
  Java入门实用代码:获取本机IP地址及主机名
  Java入门实用代码:集合转数组
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。