java enum用法_Java 枚举使用总结

目录

1、枚举基础

1.1、创建枚举最简单的方式

1.2、简单使用

2、枚举的构造方法

2.1、使用注释方式说明

2.2、使用构造方法

2.3、使用带有构造器的枚举

3、就这些了?

3.1、需求

3.2、使用Map实现

3.3、枚举结合Map

1、枚举基础

1.1、创建枚举最简单的方式

package cn.ganlixin.demo.enums;

/**

* 描述: 季节枚举类

*/

public enum SeasonEnum {

// 枚举值之间使用逗号隔开,而不是分号

SPRING, SUMMER, AUTUMN, WINNER;

}

1.2、简单使用

@Test

public void testUseSeasonEnum() {

System.out.println(SeasonEnum.AUTUMN); // AUTUMN

// 获取枚举类中定义的所有枚举项(每一项都是枚举,而不是字符串)

final SeasonEnum[] values = SeasonEnum.values();

for (SeasonEnum season : values) {

System.out.print(season +" "); // SPRING SUMMER AUTUMN WINTER

}

// 根据传入的字符串,获取与字符串同名的枚举项(如果没有字符串同名的枚举项,则会报错)

final SeasonEnum winter = SeasonEnum.valueOf("WINTER");

System.out.println(winter); // WINTER

// 枚举项的比较

System.out.println(SeasonEnum.WINTER == SeasonEnum.WINTER); // true

// 字符串不能直接与枚举进行比较

//System.out.println("WINTER" == SeasonEnum.WINTER);

// System.out.println(Objects.equals("WINTER", SeasonEnum.WINTER)); // false

}

2、枚举的构造方法

2.1、使用注释方式说明

虽然可以通过给枚举项增加注释的方式来表达枚举项的含义,但是对于打包发布后,注释是删掉的,这时就不好了

package cn.ganlixin.demo.enums;

/**

* 描述: 季节枚举类

*/

public enum SeasonEnum {

// 枚举值之间使用逗号隔开,使用注释的方式说明枚举项的含义

SPRING, // 春天

SUMMER, // 夏天

AUTUMN, // 秋天

WINTER; // 冬天

}

2.2、使用构造方法

package cn.ganlixin.demo.enums;

/**

* 描述: 季节枚举类

*/

public enum SeasonEnum {

// 枚举值定义。枚举值之间使用逗号隔开,使用构造方法设置

SPRING("春天"),

SUMMER("夏天"),

AUTUMN("秋天"),

WINTER("冬天");

// 枚举项的说明(比如注释"春天")

String description;

// 还可以自己加其他字段

// 创建一个构造方法

SeasonEnum(String description) {

this.description = description;

}

// 获取枚举项描述

public String getDescription() {

return description;

}

// 一般不建议提供setter,因为枚举类不应该被改变(包括信息描述)

// public void setDescription(String description) {

// this.description = description;

// }

}

需要注意的是,上面SeasonEnum的各部分代码顺序不能更改,也就是说枚举项定义必须在其他代码之前(包括构造方法、属性、getter)。

2.3、使用带有构造器的枚举

@Test

public void testSeasonEnumWithConstructor() {

System.out.println(SeasonEnum.AUTUMN); // AUTUMN

// 每一个枚举项都默认包含name方法,返回枚举项的字符串类型

System.out.println(SeasonEnum.AUTUMN.name()); // AUTUMN

// 调用方法获取枚举项的描述

System.out.println(SeasonEnum.AUTUMN.getDescription()); // 秋天

}

3、就这些了?

看完上面的定义和使用方式,你觉得枚举就这些了吗?的确,枚举就这内容,但是在真实开发工作中,还是不够的。

3.1、需求1

比如,我想根据一个字符串,获取枚举类中同名的枚举项,但是返回的是枚举项的描述:

伪代码如下:

String item = "xxx";

// 传入字符串获取对应的描述,而不是枚举项

String desctiption = SeasonEnum.getDescription(item);

3.2、使用Map实现

一个简单的方式就是通过使用不可变Map来实现,这里就不掩饰了

3.3、枚举结合Map

可以使用枚举和Map结合的方式,既保留了枚举的功能,也可以使用Map的功能

package cn.ganlixin.demo.enums;

import java.util.HashMap;

import java.util.Map;

/**

* 描述: 季节枚举类

*/

public enum SeasonEnum {

// 枚举值之间使用逗号隔开,使用构造方法设置

SPRING("春天"),

SUMMER("夏天"),

AUTUMN("秋天"),

WINTER("冬天");

// 用来存枚举项(字符串类型)与description的对应关系

private static final Map SeasonEnumMap = new HashMap<>();

static {

// 将枚举项的名称与描述存入map

for (SeasonEnum season : values()) {

SeasonEnumMap.put(season.name(), season.getDescription());

}

}

// 枚举项的说明(比如注释"春天")

String description;

// 创建一个构造方法

SeasonEnum(String description) {

this.description = description;

}

// 获取枚举项描述

public String getDescription() {

return description;

}

/**

* 根据字符串类型的枚举项,获取描述

* @param season

* @return

*/

public static String fromSeasonName(String season) {

return SeasonEnumMap.get(season);

}

}

使用示例

@Test

public void testEnumWithMap() {

System.out.println(SeasonEnum.fromSeasonName("WINTER")); // 冬天

System.out.println(SeasonEnum.fromSeasonName("NotExists")); // null

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值