java枚举类型-Enum

 更新时间:2021年08月24日 14:07:12   作者:Maggieq8324  
本文详细介绍了 Java1.5 引入的新特性枚举中的关键字enum,运用大量的代码加以解释,相信可以帮助到正在学习该知识的小伙伴,大家可以参考一下

前言

枚举是 Java1.5 引入的新特性,通过关键字 enum 来定义枚举类。

应用

定义

  • 关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用。
enum WeekEnum {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, weekend
}

基本Enum特性

  • 枚举类的定义
enum WeekEnum {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, weekend;

    public static void main(String[] args) {
        for (WeekEnum item : WeekEnum.values()) {
            System.out.println(item.ordinal());
            System.out.println(item.name());
            System.out.println(item.getDeclaringClass());
            System.out.println(Enum.valueOf(WeekEnum.class, item.name()));
        }
    }
}

  • 常用方法
方法 说明
values() 可以遍历enum实例,其返回enum实例的数组
ordinal() 返回每个实例在声明时的次序
name() 返回enum实例声明时的名称
getDeclaringClass() 返回其所属的enum类
Enum.valueOf() 根据给定的名称返回相应的enum实例

Enum的静态导入

  • static import 可以将 enum 实例的标识符带入当前类,无需再用enum类型来修饰 enum 实例
import static com.coisini.springbootlearn.WeekEnum.*;

public class WeekEnumTest {

    public static void main(String[] args) {
        System.out.println(Monday.name()); // Monday
        System.out.println(Tuesday.name()); //Tuesday
    }

}

Enum中添加新方法

  • Enum 可以看做是一个常规类(除了不能继承自一个enum),enum 中可以添加方法和 main 方法。
public enum WeekEnum {

    Monday(1, "周一"),
    Tuesday(2, "周二"),
    Wednesday(3, "周三"),
    Thursday(4, "周四"),
    Friday(5, "周五"),
    Saturday(6, "周六"),
    weekend(7, "周天");

    private Integer value;
    private String description;

    /**
     * 构造方法
     * @param value
     * @param description
     */
    WeekEnum(Integer value, String description) {
        this.value = value;
        this.description = description;
    }

    /**
     * 获取value
     * @return
     */
    public Integer getValue() { return this.value; }

    /**
     * 获取Desc
     * @return
     */
    public String getDesc() { return this.description; }

    /**
     * 重写ToString方法
     * @return
     */
    public String toString() {
        return this.getValue() + " " + this.getDesc();
    }

    public static void main(String[] args) {
        for (WeekEnum item : WeekEnum.values()) {
            System.out.println(item);
        }
    }

}

Switch语句中的Enum

  • 正确用法
WeekEnum weekEnum = WeekEnum.Friday;

switch (weekEnum) {
   case Friday:
       System.out.println(weekEnum);
       break;
   case Saturday:
       break;
}

  • 错误用法
WeekEnum weekEnum = WeekEnum.Friday;

switch(weekEnum) {
 // An enum switch case label must be the unqualified name of an enumeration constant
   case WeekEnum.Friday:
       break;
   default:
       break;
}

  • 常规情况下必须使用 enum 类型来修饰 enum 实例,但在 case 语句中不必如此。

Enum的继承

  • 所有的enum都继承自java.lang.Enum类,由于Java不支持多重继承,所以enum不能继承其他类,但可以实现一个或多个接口。
public interface Period {

    enum WeekEnum implements Period{
        Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, weekend
    }

    enum MonthEnum implements Period{
        January, February, March, April, May, June
    }
    
    class PeriodTest {
        public static void main(String[] args) {
            Period week = WeekEnum.Friday;
            Period month = MonthEnum.April;

            System.out.println(month + " " + week); // April Friday
        }
    }

}

EnumSet的使用

  • enum 中不能删除和添加元素,Java SE5 引入了EnumSet,其元素必须来自一个 enum 。
import java.util.EnumSet;

enum EnumSetTest {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, weekend;

    public static void main(String[] args) {
        EnumSet<EnumSetTest> points = EnumSet.noneOf(EnumSetTest.class);
        points.add(Monday);
        System.out.println(points); // [Monday]

        points.addAll(EnumSet.of(Tuesday, Wednesday));
        System.out.println(points); // [Monday, Tuesday, Wednesday]

        points = EnumSet.allOf(EnumSetTest.class);
        System.out.println(points); // [Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, weekend]

        points.removeAll(EnumSet.of(Monday, Tuesday));
        System.out.println(points); // [Wednesday, Thursday, Friday, Saturday, weekend]

        points = EnumSet.complementOf(points);
        System.out.println(points); // [Monday, Tuesday]
    }
}

EnumMap的使用

  • EnumMap 是一种特殊的 Map,其 key 值必须来自一个 enum,enum 实例定义的次序决定了其在EnumMap中的顺序。
import java.util.EnumMap;
import java.util.Map;

public enum EnumMapTest {
    MON, TUE, WED, THU, FRI, SAT, WEE;

    public static void main(String[] args) {
        EnumMap<EnumMapTest, String> enumMap = new EnumMap<EnumMapTest, String>(EnumMapTest.class);
        enumMap.put(MON, "Monday");
        enumMap.put(TUE, "Tuesday");

        for (Map.Entry<EnumMapTest, String> em : enumMap.entrySet()) {
            System.out.println(em.getKey() + " " + em.getValue()); // MON Monday TUE Tuesday
        }
    }
}

常量相关方法

  • enum 允许为 enum 实例编写方法,为每个 enum 实例赋予不同的行为,要实现常量的相关方法需要为 enum 定义- 实现 abstract 方法。
public enum EnumAbstract {
    MON {
        void getDetail() {
            System.out.println("Monday");
        }
    },
    TUE {
        void getDetail() {
            System.out.println("Tuesday");
        }
    },
    WED {
        void getDetail() {
            System.out.println("Wednesday");
        }
    };

    abstract void getDetail();

    public static void main(String[] args) {
        for (EnumAbstract ea : EnumAbstract.values()) {
            ea.getDetail();
        }
    }

}

枚举值向枚举类型转换

import java.util.stream.Stream;

public enum WeekEnum {

    Monday(1, "周一"),
    Tuesday(2, "周二"),
    Wednesday(3, "周三"),
    Thursday(4, "周四"),
    Friday(5, "周五"),
    Saturday(6, "周六"),
    weekend(7, "周天");

    private Integer value;
    private String description;

    /**
     * 构造方法
     * @param value
     * @param description
     */
    WeekEnum(Integer value, String description) {
        this.value = value;
        this.description = description;
    }

    /**
     * 枚举值向枚举类型转换
     * @param value
     * @return
     */
    public static WeekEnum toWeekEnum(int value) {
        return Stream.of(WeekEnum.values())
                .filter(item -> item.value == value)
                .findAny()
                .orElse(null);
    }

    public static void main(String[] args) {
        System.out.println(WeekEnum.toWeekEnum(1)); // Monday
    }

}

以上就是java枚举类型-Enum的详细内容,更多关于java Enum的资料请关注脚本之家其它相关文章!

相关文章

  • Netty分布式pipeline管道Handler的添加代码跟踪解析

    Netty分布式pipeline管道Handler的添加代码跟踪解析

    这篇文章主要介绍了Netty分布式pipeline管道Handler的添加代码跟踪解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • springboot配置mysql连接的实例代码

    springboot配置mysql连接的实例代码

    这篇文章主要介绍了springboot配置mysql连接的实例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • mybatis update set 多个字段实例

    mybatis update set 多个字段实例

    这篇文章主要介绍了mybatis update set 多个字段实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • JAVA中使用MD5加密实现密码加密

    JAVA中使用MD5加密实现密码加密

    本篇文章主要介绍JAVA中使用MD5加密实现密码加密,很多地方都要存储用户密码,这里整理了详细的代码,有需要的小伙伴可以参考下
    2017-07-07
  • 关于IDEA使用jsp可以访问页面转换为html弹出页面为404的问题

    关于IDEA使用jsp可以访问页面转换为html弹出页面为404的问题

    这篇文章主要介绍了关于IDEA使用jsp可以访问页面转换为html弹出页面为404的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Java string类型转换成map代码实例

    Java string类型转换成map代码实例

    这篇文章主要介绍了Java string类型转换成map代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java线程休眠_动力节点Java学院整理

    Java线程休眠_动力节点Java学院整理

    sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。下面通过实例代码给大家介绍Java线程休眠的知识,需要的朋友参考下吧
    2017-05-05
  • 微信小程序登录状态java后台解密

    微信小程序登录状态java后台解密

    这篇文章主要为大家详细介绍了微信小程序登录状态java后台解密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • 详解RabbitMq如何做到消息的可靠性投递

    详解RabbitMq如何做到消息的可靠性投递

    这篇文章主要为大家介绍了RabbitMq如何做到消息的可靠性投递,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Java实现滑动验证码(前端部分)

    Java实现滑动验证码(前端部分)

    这篇文章主要为大家介绍了如何用Java语言实现滑动验证码的生成(前端部分),文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编学习一下
    2022-10-10

最新评论