从枚举类型的ordinal()方法说起

您所在的位置:网站首页 ordinal是什么意思 从枚举类型的ordinal()方法说起

从枚举类型的ordinal()方法说起

2023-12-08 23:28| 来源: 网络整理| 查看: 265

文章背景

本周有一个开发任务涉及到了枚举类型的修改,需要对枚举类型新增一项。在新增的时候我没有加在已有项的最后面,而是在中间随便找了个位置(其实也不是很随便,我是根据语义关联性觉得放在某一项后面比较合适)。没想到的是,我的无心之举经造成了大”混乱“,相关联的业务在使用该枚举类型时几乎都错位了。查了查,原来是ordinal()在作怪。写Java代码时间也不算短了,但用到枚举类型的次数不多,ordinal()方法就更少用了。趁着这次机会对枚举类型及ordinal()方法稍稍做了下研究,于是就有了这篇文章。

Java枚举类型

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。 —— [ Java的枚举类型 ]

例子

参考了java枚举类型enum的使用这篇文章

public enum Light { /** * 红灯 */ RED , /** * 绿灯 */ GREEN , /** * 黄灯 */ YELLOW ; } public static void main(String[] args) { System.out.println(Light.GREEN.ordinal()); }

输出结果是:1

小结

我想,ordinal()方法在设计之初,仅仅只是像每一个javabean的get方法一样,返回枚举项在枚举类中出现的序号而已(从0开始的,所以这里的绿灯序号是1)。但是,聪明的我们,却发掘出了它的其他作用。聪明反被聪明误,说的就是我们吧。下面就将项目中的使用方式列出来,作为一个不成功的反例展示给大家。

反例解析 现场还原

服务端对图片枚举类型的定义:

public enum ImageEnum { other("其它"), logo("_游戏logo"), split("_游戏截图"), banner("游戏大图"), advert("广告"), information("资讯"), column("栏目"), imgs("图集"), videopreview("视频预览"); private final String value; /** * @param value */ private ImageEnum(String value) { this.value = value; } /** * 定义获取游戏图片alt值 * @param enumValue * @return */ public static String getImageEnumValue(ImageEnum enumValue) { String val; switch (enumValue) { case other: val = ImageEnum.other.value; break; case logo: val = ImageEnum.logo.value; break; …… …… case imgs: val = ImageEnum.imgs.value; break; default: val = ""; } return val; } }

action中声明一个枚举类:

//设置图标类型 ImageEnum banner = ImageEnum.banner;

前端页面拿到这个枚举类:

gameImgBannerType = ${banner.ordinal()}

js中使用了枚举类的序号并作为参数传给服务端处理:

jQuery('#file_upload').uploadify({ 'swf' : '/public/include/uploadify/uploadify.swf', 'uploader' : '/Games/uploadImg?Id='+gameImgBannerType+'&gameId='+tmpGameId, 'fileObjName' : 'file', 'method' : 'POST', 'fileTypeExts' : '*.*', 'formData' : {}, …… });

回到action层,看看action层拿到这个枚举类的序号干嘛用:

public static void uploadImg(@Required @Valid File file, Boolean img2jpgs) throws IOException { response.setContentTypeIfNotSet("text/html"); String imgType = RequestHelper.getParam("Id"


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3