Java 枚举(enum)的用法

本文详细介绍了Java枚举的定义及用法,包括如何定义简单的枚举类型、在枚举中自定义属性和方法,以及使用EnumSet和EnumMap等高级应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

枚举是在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方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值