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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 茶念小手 中级黑马   /  2013-8-10 22:07  /  1324 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于enum下的valueOf,请帮忙做下详细介绍,最好有应用实例。
我现在只知道valueOf()内接收一个字符串,而且这个字符串还必须为枚举类中参数对象一样。然后再把这个枚举中的参数对象返回。 好像意思就是把接收过来的 字符串型的 参数对象转换成真正的枚举的参数对象。 我这样理解正确吗?

还有为什么枚举类不能继承和被继承?知道的给解释下!!3Q3Q3Q3Q

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

3 个回复

倒序浏览
第一个问题:Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写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 中提供的稍微有点不同(这种不同是 java 中的编译约定导致的):
public static XXXEnum valueOf(String name);
使用同样的模式,可以十分方便地把一个枚举与一个整数对应起来,不过这种对应需要实现两个方法来构造value-valueOf模式。
第二个问题:枚举类可以实现接口,但不能继承类,因为所有枚举类都继承自java.lang.Enum(由编译器添加),同时java不支持多继承
我所了解的就是这些,希望能帮助到你

  

评分

参与人数 1技术分 +1 收起 理由
以防万一 + 1 帮助别人就是巩固自己,加油~^__^.

查看全部评分

回复 使用道具 举报
API中这样说:valueOf()返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。(不允许使用额外的空白字符。) 所以应该说是返回与传入字符串名称相同的枚举的参数对象(即枚举常量)。
为什么枚举类不能继承和被继承?
因为所有的枚举类都默认继承自Enmu类,由于java语言单继承机制的限制,导致了所有的枚举类都已经继承了一个父类,所以枚举类不能继承其他类。
至于被继承,按继承规范来说,子类必须和父类拥有共性,那么子类也应该是枚举类型的,上面已经解释了枚举类不能继承其他类的原因。
与君共同进步。
回复 使用道具 举报
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马