java枚举类型

网友投稿 248 2022-12-16

java枚举类型

目录前言应用定义基本Enum特性Enum的静态导入Enum中添加新方法Switch语句中的EnumEnum的继承EnumSet的使用EnumMap的使用常量相关方法枚举值向枚举类型转换

前言

枚举是 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 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]

iNnStXPVzY 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 enumMap = new EnumMap(EnumMapTest.class);

eniNnStXPVzYumMap.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 = 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的资料请关注我们其它相关文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java dom4j生成与解析XML案例详解
下一篇:Java日常练习题,每天进步一点点(59)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~