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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 姚志华 黑马帝   /  2011-11-8 12:29  /  1780 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

枚举不是不能生成新的对象吗,为什么用valueOf方法却可以把一个字符串转成枚举值呢?

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

3 个回复

倒序浏览
这是java api  的解释:
public static <T extends Enum<T>> T valueOf(Class<T> enumType,
                                            String name)返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。(不允许使用额外的空白字符。)

参数:
enumType - 要从中返回常量的枚举类型的 Class 对象
name - 要返回的常量名称
返回:
带指定名称的指定枚举类型的枚举常量


然后到我到Eclipse里翻了一下enum  valueOf()方法的源码。   
public static <T extends Enum<T>> T valueOf(Class<T> enumType,
                                                String name) {
        T result = enumType.enumConstantDirectory().get(name);
        if (result != null)
            return result;
        if (name == null)
            throw new NullPointerException("Name is null");
        throw new IllegalArgumentException(
            "No enum const " + enumType +"." + name);
    }

这里获取的是枚举类的字节码后在获取指定名字的那个对象,不是在那基础上新增加的。

评分

参与人数 1技术分 +2 收起 理由
宁超 + 2 赞一个!

查看全部评分

回复 使用道具 举报
valueOf方法 并没有生成新的对象,它只是把相应的已有的对象返回出来,

如果传进去的字符串与枚举中已有的对像名不同,将会报参数不匹配错误
回复 使用道具 举报
通过一个枚举值来返回相应的对象的,没有生成新的对象,valueOf(value) value必须和枚举里面的常量相同,否则就会出现错误!

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

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