内容简介:一直对枚举的知识点和应用场景都不是特别明确,特意花点时间对该知识点进行总结。有不对之处,欢迎指出;枚举是JDK1.5出的新特性。它是一种特殊数据类型,能够为一个变量定义一组预定义的常量。变量必须等于为其预定义的值之一。同时在JDK1.6中switch也支持枚举进行逻辑判断。枚举通过enum关键字进行定义。默认都是java.lang.Enum(Enum属于抽象类)的子类。同时枚举类型的每个值都会映射到Enum抽象类中的构造方法。源码如下:
一直对枚举的知识点和应用场景都不是特别明确,特意花点时间对该知识点进行总结。有不对之处,欢迎指出;
枚举是JDK1.5出的新特性。它是一种特殊数据类型,能够为一个变量定义一组预定义的常量。变量必须等于为其预定义的值之一。同时在JDK1.6中switch也支持枚举进行逻辑判断。
枚举通过enum关键字进行定义。默认都是java.lang.Enum(Enum属于抽象类)的子类。同时枚举类型的每个值都会映射到Enum抽象类中的构造方法。源码如下:
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable { //Enum.java:117-120行 protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } } 复制代码
1、简单版,代码如下:
/** * TestEnum.java * TestEnum 声明枚举 * RED,GREEN,BLUE 预定义的常量 **/ public enum TestEnum { RED,GREEN,BLUE; } //TestMain.java class TestMain { public static void main(String[] args){ for(TestEnum test : TestEnum.values()){ System.out.println(test); } } } //执行结果 RED GREEN BLUD 复制代码
以上代码其实执行了3次Enum抽象类的构造方法。可以打断点调试下
//类似执行了3次 /** *第一个参数为值的名称 *第二个参数为值的序号 **/ new Enum<TestEnum>("RED",0); new Enum<TestEnum>("GREEN",1); new Enum<TestEnum>("BLUE",2); 复制代码
2、以上代码我都不知道RED、GREEN、BLUE是干啥的。枚举可以实现类似key:val结构的形式吗?可以的,Java允许我们在枚举类中添加任意方法,通过该机制,我们就可以添加所谓的描述了。代码如下:
/** * TestEnum.java * TestEnum 声明枚举 * RED,GREEN,BLUE 预定义的常量 **/ public enum TestEnum { RED("red","红色"),GREEN("green","绿色"),BLUE("blue","蓝色"); private String code; private String desc; TestEnum(String code,String desc){ this.code=code; this.desc=desc; } public String getCode(){ return code; } public void setCode(String code){ this.code=code; } public String getDesc(){ return desc; } public void setDesc(String desc){ this.desc=desc; } public static HashMap toMap(){ //枚举转成Map(前端的JSON) HashMap map=new HashMap(); for(TestEnum test:TestEnum.values()){ map.put(test.getCode(),test.getDesc()); } return map; } } //TestMain.java class TestMain { public static void main(String[] args){ for(TestEnum test : TestEnum.values()){ System.out.println(test.getDesc()); } } } //执行结果 红色 绿色 蓝色 复制代码
以上方式可以用来做HTTP请求响应返回JSON数据格式;
3、带抽象方法的枚举类;例如:按不同班级不同学生,分配不同老师数。A、B、C这3个班。A班学生达到30人,分配2个老师;B班学生达到40人,分配3个老师;C班学生达到50人,分配4个老师;代码实现如下:
//枚举文件TeacherNumEnum.java public enum TeacherNumEnum{ A("30人") { public int distribute(){ return 2; } }; B("40人") { public int distribute(){ return 3; } }; C("50人") { public int distribute(){ return 4; } }; private String desc; //人数描述 TaskTypeEnum(String desc){ this.desc=desc; } public String getDesc(){ return desc; } public abstract int distribute(); } //TestMain.java class TestMain { public static void main(String[] args){ for(TeacherNumEnum task : TeacherNumEnum.values()){ System.out.println(task.getDesc()+";分配老师人数:"+task.distribute()); } } } //执行结果 30人;分配老师人数:2 40人;分配老师人数:3 50人;分配老师人数:4 复制代码
4、枚举类不存在继承关系,但是可以实现接口。使用extends实现在idea编辑器就会有报错提示。在枚举类中实现接口,是对枚举类的一种约束。可以自行码下;
Enum枚举类方法总结(TeacherNumEnum为例):
在这分为Enum类方法和枚举类值方法
//Enum类方法总结: TeacherNumEnum.values()://Enum[]://返回Enum数组,所以for可以循环 TeacherNumEnum.valueof("枚举值"); //Enum:返回相应的枚举值 //Enum类值方法总结: for(TeacherNumEnum task : TeacherNumEnum.values()){ task.ordinal(); //int:返回枚举值相应的序号 task.name(); //String:返回枚举值名称 task.toString(); //String:返回枚举值名称字符串 task.compareTo(E o); //int:返回此枚举与指定对象的顺序 task.equals(E o); //boolean:返回此枚举与指定对象是否匹配 } 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- c# – 枚举时项目发生变化时是否会影响枚举?
- 测者的测试技术手册:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)
- 测者的JUnit单元测试探坑记:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)
- c# – 循环枚举类型
- Python 的枚举类型
- 枚举的使用示例
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ruby on Rails Tutorial
Michael Hartl / Addison-Wesley Professional / 2012-8-6 / USD 44.99
"Ruby on Rails(TM) Tutorial by Michael Hartl has become a must-read for developers learning how to build Rails apps." -Peter Cooper, Editor of Ruby Inside Using Rails, developers can build web applica......一起来看看 《Ruby on Rails Tutorial》 这本书的介绍吧!
HTML 编码/解码
HTML 编码/解码
XML 在线格式化
在线 XML 格式化压缩工具