Java中枚举知识点总结

栏目: Java · 发布时间: 5年前

内容简介:一直对枚举的知识点和应用场景都不是特别明确,特意花点时间对该知识点进行总结。有不对之处,欢迎指出;枚举是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:返回此枚举与指定对象是否匹配
}
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Inside Larry's and Sergey's Brain

Inside Larry's and Sergey's Brain

Richard Brandt / Portfolio / 17 Sep 2009 / USD 24.95

You’ve used their products. You’ve heard about their skyrocketing wealth and “don’t be evil” business motto. But how much do you really know about Google’s founders, Larry Page and Sergey Brin? Inside......一起来看看 《Inside Larry's and Sergey's Brain》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具