A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程振 中级黑马   /  2012-9-18 20:51  /  1656 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 orgcheng 于 2012-9-18 22:19 编辑

今天看了交通灯视频教程,里面使用到枚举的valueOf方法,就下面那个:
  1. public Lamp blackOut(){
  2. this.lighted = false;
  3. if(opposite != null){
  4. Lamp.valueOf(opposite).blackOut();
  5. }

  6. Lamp nextLamp= null;
  7. if(next != null){
  8. // 这里使用了valueOf方法
  9. nextLamp = Lamp.valueOf(next); // <------------------------------------------------------------------
  10. System.out.println("绿灯从" + name() + "-------->切换为" + next);
  11. nextLamp.light();
  12. }
  13. return nextLamp;
  14. }
复制代码
可是j2se的api里只有这个
[td]static <T extends Enum<T>>
T
valueOf(Class<T> enumType, String name)
没有上面使用的那种valueOf方法,想知道它从哪来的?

评分

参与人数 1黑马币 +30 收起 理由
王德升 + 30 麻烦去上面通道把名字改下,

查看全部评分

2 个回复

倒序浏览
枚举静态方法valueOf()可以根据枚举类名字获得枚举对象
我没在枚举类中找到这个方法,但是用myeclipse中给出提示,却是是枚举的静态方法~!
回复 使用道具 举报
Java 的 enum 在设计的时候就尽量在避免与整数值混用在一起,这个设计大大地限制了它的使用场合,比如不能直接把一个 enum 值写入数据库中等,所以 java 中的 enum 一直不被 java 程序员们所喜欢。
其实,即使在 java 的 enum 设计之初,仍然为这种混用的可能性提供了一种模式,不过缺省提供的可混用的数据类型不是整数,而是改成了字符串了。这种模式我称之为value-valueOf模式,在 enum 的设计中是通过两个相对应的函数建立了一种从 enum 到 String 的映射法则。
在 java.lang.Enum (也就是所有 enum 的基类)中提供了两个方法实现了value-valueOf模式:
public final String name();
public static <T extends=Enum<T>
第一个方法把一个枚举的值映射到一个唯一的字符串;第二个方法把一个字符串映射到了一个唯一的枚举值。
在实例的 enum 对象中,第二个方法的 signature 与 java.lang.Enum 中提供的稍微有点不同;
public static XXXEnum valueOf(String name);
使用同样的模式,可以十分方便地把一个枚举与一个整数对应起来,不过这种对应需要实现两个方法来构造value-valueOf模式。
下面给一个简单的例子:
enum Weekday { Monday(1), Tuesday(2), Wednesday(3), Thursday(4), Friday(5), Saturday(6), Sunday(0);
final int _value;
Weekday(int _value) { this._value = _value; } // 把枚举值映射到整数
public int value() { return value; } // 把整数映射到枚举值
public static Weekday valueOf(int value)
{ for(Weekday day : Weekday.values())
{ if(day.value() == value) { return day; } } return null;
}
}
其实,这里的value-valueOf实现了一种可以映射到任意类型的可能性,并且这个模式也并不只有枚举类型才适合使用。

评分

参与人数 1黑马币 +2 收起 理由
程振 + 2 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马