状态常量爆炸-java枚举类型(enum type)-代码一个也没有少
最近程序的状态常量太多了,而且跨平台跨语言的多个项目,导致状态常量值到处都是。雷,迟早得炸了。
实际使用还是有问题
状态值,在Java项目里,很多这么搞:
public static final int BOOK_STATUS_NOT_AUDIT = 0; public static final int BOOK_STATUS_AUDITING = 1; public static final int BOOK_STATUS_PASS_AUDIT = 2; private static Map<Integer, String> bookStatusDescMap = new HashMap<Integer, String>(); static { bookStatusDescMap.put(BOOK_STATUS_NOT_AUDIT, "未审核"); bookStatusDescMap.put(BOOK_STATUS_AUDITING, "审核中"); bookStatusDescMap.put(BOOK_STATUS_PASS_AUDIT, "已通过"); } /** * Get description of book status * @param bookStatus * @return */ public static String getBookStatusDesc(int bookStatus){ return bookStatusDescMap.get(bookStatus); }
这种状态值太多的,与语言没有关系。
ruby程序里也一样:
D_ATTRIBUTES_REBATE_FREE = 1 D_ATTRIBUTES_XXX = 2 D_ATTRIBUTES_MIDAUTUMN = 3
Status_Invalid = 0 Status_Valid = 1 Status_Deleted = 2
java中,求助java的枚举,仍然有的问题:
多语言沟通的话,基本这些状态都是字符串和数字,而一般不会直接给出一个java枚举常量来。web开发中,和浏览器的请求打交道,也就只能得到字符串和数字了。
这时就会有个问题,根据一个数字,怎么知道java程序里面,对应哪个枚举常量。
之后才能根据此枚举常量,调用其方法,得到其描述等信息。
封装一下处理方法:
public static String getSeasonDesc(int seasonCode){ return getSeason(seasonCode).getDesc(); } public static Season getSeason(int seasonCode){ for (Season season : Season.values()) { if(season.getCode() == seasonCode){ return season; } } return Season.SPRING; }
这么下来以后,从直观性,易读性,沟通性(得让那些不懂java的同学知道很容易知道我的状态设置情况并容易copy一段代码),来看,还不如直接用最“原始”的办法。
所以,最终我还是选择用“最原始”的方式。
Java枚举中的一些细节,下面那篇文章也讲到了,但有一些细节,再补充一下。
# 代码一个也没有少
只不过是封装了一下,在java中使得编译器不能识别 magic-number 了。
# 枚举中的ordinal()方法
public final int ordinal()
Returns the ordinal of this enumeration constant (its position in its enum declaration, where the initial constant is assigned an ordinal of zero). Most programmers will have no use for this method. It is designed for use by sophisticated enum-based data structures, such as java.util.EnumSet and java.util.EnumMap.
这个是final方法的,给java系统自己用的,不能改,不该用。
# 枚举的常量,最后居然可以不用分号结尾!
# 枚举常量即构造函数
其他使用情况可以参考: http://blog.csdn.net/congqingbin/article/details/7520137
本文参考阅读:http://free9277.iteye.com/blog/1842880
+、+
===
----
+。+
相关推荐
NULL 博文链接:https://rensanning.iteye.com/blog/2013734
全面掌握java枚举类型(enum-type)1
Java ---- enum --- 枚举类案例
NULL 博文链接:https://janeky.iteye.com/blog/463611
Java中的枚举类型Enum示例源代码,详见http://blog.csdn.net/snarlfuture/article/details/18996037
java枚举类型的定义使用介绍,还有示例。
Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...
Java1.5提供了关键字enum,能够通过该关键字方便得定义自己须要的枚举类型,比方 enum Season { SPRING, SUMMER, AUTUMN, WINTER } 定义了一个季节枚举类型。 在本例中,对于Season.SPRING这个...
java代码-java enum枚举遍历
Java 实例 - Enum(枚举)构造函数及方法的使用源代码-详细教程.zip
java 枚举(enum) 详解(学习资料); java 枚举(enum) 详解(学习资料); java 枚举(enum) 详解(学习资料); java 枚举(enum) 详解(学习资料);
javaenum源代码
enum的全称为enumeration, 是 JDK 1.5中引入的新特性,存放在 java....下面这篇文章是我在使用enum过程中的一些经验和总结,分享出来方便大家快速的掌握Java中枚举(enum),有需要的朋友们下面跟着小编来一起看看吧。
java enum详细教程。由浅入深,包括基本语法方面..很适合新手学习。/n各位看官。绝对超值。
C++中枚举类型(enum)
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。 Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。 例如定义一个颜色...
主要介绍了mybatis-plus使用@EnumValue处理枚举类型的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Enum是Sun全新引进的一个关键字,看起来很象是特殊的class,它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。在声明一个enum类型时,应该注意到enum类型有如下的一些特征:
java枚举小例子,简单了解枚举的用法,适合初学者使用。
主要介绍了Java枚举类型enum的详解及使用的相关资料,需要的朋友可以参考下