黑马程序员技术交流社区

标题: 枚举 [打印本页]

作者: 姚志华    时间: 2011-11-8 12:29
标题: 枚举
枚举不是不能生成新的对象吗,为什么用valueOf方法却可以把一个字符串转成枚举值呢?
作者: 海林    时间: 2011-11-8 12:40
这是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);
    }

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

作者: 李建雄    时间: 2011-11-8 12:46
valueOf方法 并没有生成新的对象,它只是把相应的已有的对象返回出来,

如果传进去的字符串与枚举中已有的对像名不同,将会报参数不匹配错误
作者: 胡文杰    时间: 2011-11-8 15:20
通过一个枚举值来返回相应的对象的,没有生成新的对象,valueOf(value) value必须和枚举里面的常量相同,否则就会出现错误!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2