java枚举类型-Enum
目录
- 前言
- 应用
- 定义
- 基本Enum特性
- Enum的静态导入
- Enum中添加新方法
- Switch语句中的Enum
- Enum的继承
- EnumSet的使用
- EnumMap的使用
- 常量相关方法
- 枚举值向枚举类型转换
前言
枚举是 Java1.5 引入的新特性,通过关键字 enum 来定义枚举类。
应用
【java枚举类型-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()); // MondaySystem.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 = https://www.it610.com/article/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 constantcase 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) {EnumSetpoints = 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) {EnumMapenumMap = new EnumMap (EnumMapTest.class); enumMap.put(MON, "Monday"); enumMap.put(TUE, "Tuesday"); for (Map.Entry 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 = https://www.it610.com/article/value; this.description = description; }/*** 枚举值向枚举类型转换* @param value* @return*/public static WeekEnum toWeekEnum(int value) {return Stream.of(WeekEnum.values()).filter(item -> item.value =https://www.it610.com/article/= value).findAny().orElse(null); }public static void main(String[] args) {System.out.println(WeekEnum.toWeekEnum(1)); // Monday}}
以上就是java枚举类型-Enum的详细内容,更多关于java Enum的资料请关注脚本之家其它相关文章!
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- Java基础-高级特性-枚举实现状态机