博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中怎样由枚举常量的ordinal值获得枚举常量对象
阅读量:2292 次
发布时间:2019-05-09

本文共 991 字,大约阅读时间需要 3 分钟。

 Java1.5提供了关键字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.lang.Enum的子类,能够通过“javap -c Season”命令反编译来观察这一点。Enum类提供了一个ordinal()方法,用来返回枚举对象的序数,比方本例中SPRING, SUMMER, AUTUMN, WINTER的序数就分别为0, 1, 2, 3。在有些情况下,我们须要使用这个序数,并且还有可能再依据这个序数生成所须要的枚举对象,但是Enum并没有提供valueOf(int)这个方案,那是不是就做不到呢?
  对于这个问题,实际上能够利用枚举类型的values()方法间接的做到。values()方法返回一个枚举对象数组,比方本例就是Season[],数组元素依照序数排列。在自己定义的枚举类型中,我们仅仅要定义自己的valueOf(int)方法,并返回该数组下标对象的对象就能够了。代码例如以下:
Java代码  
  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. }  
 怎么样,还是挺简单的吧?

转载地址:http://npvnb.baihongyu.com/

你可能感兴趣的文章
Android 多线程
查看>>
Android Service服务(一)
查看>>
Android Service服务(二)
查看>>
愿你历尽千帆,归来仍少年
查看>>
java实现生产者消费者问题
查看>>
Android 数据存储三种方式
查看>>
Android 获取设备唯一ID
查看>>
二叉搜索树
查看>>
Android 横竖屏幕切换
查看>>
Android获取当前装置屏幕信息
查看>>
TCP/IP协议卷一 契约 (部分内容)
查看>>
Java 内存管理和垃圾回收机制
查看>>
iOS invalid bitcode signature等常见错误
查看>>
iOS 开发常用的代码块
查看>>
ios 文件存储
查看>>
IOS 生成图片数字字母验证
查看>>
socket 使用select()非阻塞方式实现
查看>>
setsockopt()函数使用详解
查看>>
信号量sem_t,互斥锁pthread_mutex_t的使用
查看>>
FFmpeg 解码
查看>>