前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中怎样由枚举常量的ordinal值获得枚举常量对象

Java中怎样由枚举常量的ordinal值获得枚举常量对象

作者头像
全栈程序员站长
发布2022-07-14 15:45:49
1.7K0
发布2022-07-14 15:45:49
举报

大家好,又见面了,我是全栈君

Java1.5提供了关键字enum,能够通过该关键字方便得定义自己须要的枚举类型,比方

  1. enum Season {
  2. SPRING, SUMMER, AUTUMN, WINTER
  3. }

就定义了一个季节枚举类型。

在本例中,对于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)方法,并返回该数组下标对象的对象就能够了。代码例如以下:

  1. enum Season {
  2. SPRING, SUMMER, AUTUMN, WINTER;
  3. public static Season valueOf(int ordinal) {
  4. if (ordinal < 0 || ordinal >= values().length) {
  5. throw new IndexOutOfBoundsException(“Invalid ordinal”);
  6. }
  7. return values()[ordinal];
  8. }
  9. }

怎么样,还是挺简单的吧?

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117993.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年12月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档