扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
package com.school.stereotype;
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、成都做网站、外贸营销网站建设、五寨网络推广、成都小程序开发、五寨网络营销、五寨企业策划、五寨品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供五寨建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
/**
* 活动枚举类型
* @author QiXuan.Chen
*/
public enum EventStatus {
/**
* 未发布。
*/
DRAFT("DRAFT", "未发布"),
/**
* 已发布。
*/
PUBLISHED("PUBLISHED", "已发布");
/**
* 活动状态的值。
*/
private String value;
/**
* 活动状态的中文描述。
*/
private String text;
/**
* @param status 活动状态的值
* @param desc 活动状态的中文描述
*/
private EventStatus(String status, String desc) {
value = status;
text = desc;
}
/**
* @return 当前枚举对象的值。
*/
public String getValue() {
return value;
}
/**
* @return 当前状态的中文描述。
*/
public String getText() {
return text;
}
/**
* 根据活动状态的值获取枚举对象。
*
* @param status 活动状态的值
* @return 枚举对象
*/
public static EventStatus getInstance(String status) {
EventStatus[] allStatus = EventStatus.values();
for (EventStatus ws : allStatus) {
if (ws.getValue().equalsIgnoreCase(status)) {
return ws;
}
}
throw new IllegalArgumentException("status值非法,没有符合课程状态的枚举对象");
}
}
枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。
1、常量的使用
在JDK1.5之前,我们定义常量都是:public static fianl....。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
1234567
package com; public enum Color { RED, GREEN, BLANK, YELLOW }
使用
123456789101112131415161718192021
package com; public class B { public static void main(String[] args) { System.out.println( isRed( Color.BLANK ) ) ; //结果: false System.out.println( isRed( Color.RED ) ) ; //结果: true } static boolean isRed( Color color ){ if ( Color.RED.equals( color )) { return true ; } return false ; } }
或者 switch 的使用
12345678910111213141516171819202122232425
package com; public class B { public static void main(String[] args) { showColor( Color.RED ); } static void showColor(Color color){ switch ( color ) { case BLANK: System.out.println( color ); break; case RED : System.out.println( color ); break; default: System.out.println( color ); break; } }}
2、自定义函数
package com; public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); private String name ; private int index ; private Color( String name , int index ){ this.name = name ; this.index = index ; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
使用
package com; public class B { public static void main(String[] args) { //输出某一枚举的值 System.out.println( Color.RED.getName() ); System.out.println( Color.RED.getIndex() ); //遍历所有的枚举 for( Color color : Color.values()){ System.out.println( color + " name: " + color.getName() + " index: " + color.getIndex() ); } } }
结果
红色
1
RED name: 红色 index: 1
GREEN name: 绿色 index: 2
BLANK name: 白色 index: 3
YELLO name: 黄色 index: 4
总结:
1、枚举的本质是类,在没有枚举之前,仍然可以按照java最基本的编程手段来解决需要用到枚举的地方。枚举屏蔽了枚举值的类型信息,不像在用public static final定义变量必须指定类型。枚举是用来构建常量数据结构的模板,这个模板可扩展。枚举的使用增强了程序的健壮性,比如在引用一个不存在的枚举值的时候,编译器会报错。枚举的更多用法还需要在开发中去研究创造,Java5、Java6增加了不少新的特性,技术在升级,对程序员来说就要学习,如果你热爱java的话。否则别人用到新特性的代码你看不懂,那才叫郁闷。
2、枚举在Java家族中只占了很小的一块比重,所以我在项目中用枚举的地方不是很多,毕竟,一个项目是很多人开发维护的,用一个陌生的东西,会给其他的同事造成阅读困难。所以常量大都是用public static final 来定义的。
java中可以私用enummap来保存枚举值,示例如下:
private static void testEnumMap() {
// 1. 演示定义 EnumMap 对象, EnumMap 对象的构造函数需要参数传入 , 默认是key 的类的类型
EnumMapLight, String currEnumMap = new EnumMapLight, String(
Light. class );
currEnumMap.put(Light. RED , " 红灯 " );
currEnumMap.put(Light. GREEN , " 绿灯 " );
currEnumMap.put(Light. YELLOW , " 黄灯 " );
// 2. 遍历对象
for (Light aLight : Light.values ()) {
System. out .println( "[key=" + aLight.name() + ",value="
+ currEnumMap.get(aLight) + "]" );
}
}
你可以把枚举当作是一种类型,比如enum Size你可以看作class Size这样的声明。
然后,SMLL("S")是什么意思呢,就相当于你在class Size这个类内部定义了这样一个常量对象:
public static final Size SMLL = new Size("S");
只不过用枚举的话这样这样的声明方式被简成SMLL("S"),这是声明枚举常量的方式,比较简单。就是说这样等于是调用了private Size(String abbreviation) {this.abbreviation = abbreviation; }这个构造函数。
Java中具有多个值的枚举, 具有字符串值的 Java 枚举, 枚举与 Java
为了得到好,有两种方法可以实现这一点,第一种是为每个枚举常量覆盖 toString() 方法,第二种是使用实例变量来保存。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流