首页 > 编程知识 正文

java枚举values,java 枚举 valueof

时间:2023-05-05 18:39:52 阅读:247241 作者:3471

目录

引言

valueOf()用法

更新


引言

最近学习Java,到了枚举类部分,书上列举了几个方法:

int compareTo()String name()int ordinal()String toString()valueOf()

前面几个都没问题,照着书看就会用了,唯独最后一个让我看得有些懵,因为书上是这么把这个方法呈现在我眼前的:

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)

说实话第一眼看我没看太明白,前面几个明明就是返回值,形参列表就完了,这个咋这么一串!然后我就凭着粗糙的理解瞎用:

第一版SeasonEnum.valueOf(SeasonEnum,SPRING);//SeasonEnum为定义的枚举类,SPRING为其中实例

报错,然后瞎试了试其他的变换,依旧报错,所以就上网查一查。看到如下代码x

Mobile ret;ret = Mobile.valueOf("Samsung");

我当时看到心里有些固执:我定义的枚举类实例是SPRING,不是一个字符串"SPRING"!所以觉得别人博客上写错了。但还是随手加了双引号再试试自己的代码,依旧编译不通过。

当时一连看了好几篇博客,感觉就没有一个好好讲明白了这个方法,心里有些纳闷儿:咋一个方法看了几篇博客都没人讲明白呢?!其实后来想想原因在于我自己看别人的东西没有看得很仔细,代码x其实把要素都包含了。

valueOf()用法

下面就单独讲一下valueOf()方法:

该方法为静态方法,调用者为枚举类,不是枚举值;该方法形参只要一个String类型的值即可,并且该String值为枚举值对应的名称,即toString()方法返回的值(比如枚举类为SPRING,对应的名称就是"SPRING"),所以肯定是需要双引号的;该方法有返回值,且返回值是一个枚举值(枚举类中定义的实例),比如我这里是季节枚举类,枚举值就是SPRING, SUMMER, FALL, WINTER;该方法方法的作用就是返回【名称为String name的】【枚举类T中的】枚举值;public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)//官方给的这个说明中的形参列表看上去好像是两个:一个Class<T> enumType,另一个String name。但实际上Class<T> enumType这个是不需要的(或者说这是官方说明文档的语法,并不是表示形参)。

所以我的第一版代码修改后应该是:

SeasonEnum a;//定义枚举类型变量a,用于接收valueOf()方法的返回值a=SeasonEnum.valueOf("SPRING");//valueOf()方法调用者为枚举类,此处为SeasonEnum;形参只需一个——枚举值名称,注意是String类型,要加双引号,此处为"SPRING"System.out.println(a.compareTo(SeasonEnum.SPRING));//通过a调用实例方法compareTo(),输出0,表明a为枚举值SPRING

可能比较啰嗦,因为掺杂了自己的感受,但valueOf()的用法应该还是讲明白了的。其实本来也就没啥,主要是一开始被那一串官方给的说明给搞懵了。

更新

没想到刚看完上一小节就发现了一个valueOf()的用法,证明我上面说的比较局限,直接贴代码:

SeasonEnum a;SeasonEnum b;a=SeasonEnum.valueOf(SeasonEnum.class,"SPRING");//单独用SeasonEnum做实参报错,但是加上后缀.class就没问题了System.out.println(a.compareTo(SeasonEnum.SPRING));b=Enum.valueOf(SeasonEnum.class,"SUMMER");//上面调用主体是SeasonEnum,这里是Enum。需要说明一下:所有枚举类都继承了java.lang.Enum类。System.out.println(b.compareTo(SeasonEnum.SUMMER));

 

网络ACL 私有网络 UVPCwin7电脑文件夹如何加密

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。