Java基础系列13: 枚举

Java基础系列13: 枚举

本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。

什么是枚举类

用枚举类型定义的枚举变量只能取集合中的某一元素值,且是固定的.

enum weekdays 
  { Sun,Mon,Tue,Wed,Thu,Fri,Sat };

可以给上述的这些字符都进行赋值.

枚举类的定义

1,不能继承其他父类,默认继承java.lang.Enum类
2,默认使用final修饰
3,所有实例必须在第一行给出

可以拥有实例,比如上面的sun,mon都是实例,有且仅有这几个实例.

一个例子,使用Color.values()可以获取枚举类的所有实例

enum Color {
    //每个颜色都是枚举类的一个实例,并且构造方法要和枚举类的格式相符合。
    //如果实例后面有其他内容,实例序列结束时要加分号。
    Red("红色", 1), Green("绿色", 2), Blue("蓝色", 3), Yellow("黄色", 4);
    String name;
    int index;
    Color(String name, int index) {
        this.name = name;
        this.index = index;
    }
    public void showAllColors() {
        //values是Color实例的数组,在通过index和name可以获取对应的值。
        for (Color color : Color.values()) {
            System.out.println(color.index + ":" + color.name);
        }
    }
}

调用枚举类的实例可以直接用’类名.实例名’这种方法来使用

枚举类集合

java.util.EnumMap下面的EnumMap的一个例子:

public class 枚举类集合 {
    public static void main(String[] args) {
        EnumMap<Color, String> map = new EnumMap<Color, String>(Color.class);
        map.put(Color.Blue, "Blue");
        map.put(Color.Yellow, "Yellow");
        map.put(Color.Red, "Red");
        System.out.println(map.get(Color.Red));
    }
}

枚举类构造实例:

代码来源于:https://how2playlife.com/2019/09/14/14%E6%9E%9A%E4%B8%BE%E7%B1%BB/
定义只有一个参数的枚举类:

enum SeasonType {
    // 通过构造函数传递参数并创建实例
    SPRING("spring"),
    SUMMER("summer"),
    AUTUMN("autumn"),
    WINTER("winter");

    // 定义实例对应的参数
    private String msg;

    // 必写:通过此构造器给枚举值创建实例
    SeasonType(String msg) {
        this.msg = msg;
    }

    // 通过此方法可以获取到对应实例的参数值
    public String getMsg() {
        return msg;
    }
}

如果有两个参数:

public enum Season {
    // 通过构造函数传递参数并创建实例
    SPRING(1, "spring"),
    SUMMER(2, "summer"),
    AUTUMN(3, "autumn"),
    WINTER(4, "winter");

    // 定义实例对应的参数
    private Integer key;
    private String msg;

    // 必写:通过此构造器给枚举值创建实例
    Season(Integer key, String msg) {
        this.key = key;
        this.msg = msg;
    }

    // 很多情况,我们可能从前端拿到的值是枚举类的 key ,然后就可以通过以下静态方法获取到对应枚举值
    public static Season valueofKey(Integer key) {
        for (Season season : Season.values()) {
            if (season.key.equals(key)) {
                return season;
            }
        }
        throw new IllegalArgumentException("No element matches " + key);
    }

    // 通过此方法可以获取到对应实例的 key 值
    public Integer getKey() {
        return key;
    }

    // 通过此方法可以获取到对应实例的 msg 值
    public String getMsg() {
        return msg;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值