Java 枚举(enum)的用法

Posted yuminfeng728

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 枚举(enum)的用法相关的知识,希望对你有一定的参考价值。

概述

枚举是在JDK 1.5 时引入的类型。创建枚举类型要使用关键字enum,隐含了所创建的类型都是java.lang.Enum类的子类。枚举类型中的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数的值表示了被创建的顺序。

简单枚举定义常量

enum Colors 
    RED, GREEN, YELLOW, GRAY;


public class Main 

    public static void main(String args[]) 

        Colors color = Colors.GRAY;

        System.out.println(color.name()); //返回此枚举列表常量的名称

        //用于 switch 条件的判断
        switch (color) 
        case RED:
            System.out.println("this is red color");
            break;
        case GREEN:
            System.out.println("this is red green");
            break;
        case YELLOW:
            System.out.println("this is red yellow");
            break;
        case GRAY:
            System.out.println("this is red gray");
            break;
        

        System.out.println(color.ordinal()); // 结果为3:返回枚举列表常量在枚举中的索引位置,从0开始

        for(Colors c : Colors.values())     // values()可以获得枚举列表常量值的数组
            System.out.println(c);
        

    

在枚举中自定义属性和方法

enum Colors 
    //枚举列表常量通过括号赋值时,必须要有对应参数的构造函数,否则编译出错。
    //枚举列表常量必须统一赋值,或者不赋值,否则编译出错
    RED("红色",1), GREEN("绿色",2), YELLOW("黄色",3), GRAY("灰色",4);

    private String name;
    private int id;

    //构造方法里面的参数类型与枚举列表中参数类型一致
    private Colors(String name , int id) 
        this.name = name;
        this.id = id;
    

    public String getName() 
        return name;
    

    public int getId() 
        return id;
    
    //通过id,获得name值
    public static String getName(int id)

        for (Colors color : Colors.values()) 
            if(color.id == id)
                return color.name;
            
        
        return null;
    


public class Main 

    public static void main(String args[]) 

        System.out.println(Colors.getName(3));
    

EnumSet和EnumMap的应用

 public static void main(String args[]) 

        //创建一个枚举集合包含所有在指定元素类型的元素
        EnumSet<Colors> colorSet = EnumSet.allOf(Colors.class);

        Iterator<Colors> iterator= colorSet.iterator();
        while(iterator.hasNext())
            System.out.println(iterator.next().getId());
        

        EnumMap<Colors, String> colorMap = new EnumMap<Colors, String>(Colors.class);
        colorMap.put(Colors.RED, "红色");
        colorMap.put(Colors.GREEN, "绿色");
        colorMap.put(Colors.YELLOW, "黄色");
        colorMap.put(Colors.GRAY, "灰色");

        Iterator<Entry<Colors, String>> it = colorMap.entrySet().iterator();
        while(it.hasNext())
            System.out.println(it.next().getKey());
        
    

枚举的特性:
1.不能有public的构造函数,这样可以保证客户代码没有办法新建一个enum的实例。
2.所有的枚举值都是public,static,final的。
3.Enum默认实现了java.lang.Comparable接口
4.重写了toString方法。

以上是关于Java 枚举(enum)的用法的主要内容,如果未能解决你的问题,请参考以下文章

java枚举类型enum用法

java中的enum

Java enum(枚举)的用法详解(转)

跟王老师学枚举:枚举类API

Effective Java 读书笔记之五 枚举和注解

java 枚举(enum) 详细用法