概述
目录
- 【常量】
- 【switch】
- 【向枚举中添加新方法 【常用】】
- 【简化版】【推荐】
- 【完整版】
- 【覆盖枚举的方法】
- 【实现接口】
- 【使用接口组织枚举】
- 【关于枚举集合的使用】
JDK1.5引入了新的类型—枚举
【常量】
在JDK1.5 之前,我们定义常量都是: public static final… 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
public enum Color {
RED, GREEN, BLANK, YELLOW
}
【switch】
JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}
【向枚举中添加新方法 【常用】】
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。
【简化版】【推荐】
package com.ssm.common.enums;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
/**
* 颜色枚举类
*/
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum ColorEnum {
RED("red", "红色"),
GREEN("green", "绿色"),
BLANK("blank", "白色"),
YELLO("yello", "黄色");
// 成员变量
private String name;
private String value;
// 将数据缓存到map中
private static final Map<String, String> map = new HashMap<String, String>();
static {
for (ColorEnum color : ColorEnum.values()) {
map.put(color.getName(), color.getValue());
}
}
// 根据name查询value值
public static String getValueByName(String name) {
return map.get(name);
}
}
【完整版】
package com.ssm.common.enums;
import java.util.HashMap;
import java.util.Map;
/**
* 颜色枚举类
*/
public enum ColorEnum {
RED("red", "红色"),
GREEN("green", "绿色"),
BLANK("blank", "白色"),
YELLO("yello", "黄色");
// 成员变量
private String name;
private String value;
// 构造方法
private ColorEnum(String name, String value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public String getValue() {
return value;
}
// 将数据缓存到map中
private static final Map<String, String> map = new HashMap<String, String>();
static {
for (ColorEnum color : ColorEnum.values()) {
map.put(color.getName(), color.getValue());
}
}
// 根据name查询value值
public static String getValueByName(String name) {
return map.get(name);
}
}
【覆盖枚举的方法】
下面给出一个toString()方法覆盖的例子。
package com.ssm.common.enums;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
/**
* 颜色枚举类
*/
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum ColorEnum {
RED("red", "红色"),
GREEN("green", "绿色"),
BLANK("blank", "白色"),
YELLO("yello", "黄色");
// 成员变量
private String name;
private String value;
// 将数据缓存到map中
private static final Map<String, String> map = new HashMap<String, String>();
static {
for (ColorEnum color : ColorEnum.values()) {
map.put(color.getName(), color.getValue());
}
}
// 根据name查询value值
public static String getValueByName(String name) {
return map.get(name);
}
@Override
public String toString() {
return this.name + "_" + this.value;
}
}
【实现接口】
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。
// 定义接口
public interface Behaviour {
void print();
String getInfo();
}
// 实现接口
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum ColorEnum implements Behaviour {
RED("red", "红色"),
GREEN("green", "绿色"),
BLANK("blank", "白色"),
YELLO("yello", "黄色");
// 成员变量
private String name;
private String value;
//接口方法
@Override
public String getInfo() {
return this.name;
}
//接口方法
@Override
public void print() {
System.out.println(this.name + ":" + this.value);
}
}
【使用接口组织枚举】
public interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}
/**
* 测试继承接口的枚举的使用
*/
private static void testImplementsInterface() {
for (Food.DessertEnum dessertEnum : Food.DessertEnum.values()) {
System.out.print(dessertEnum + " ");
}
System.out.println();
// 我这地方这么写,是因为我在自己测试的时候,把这个coffee单独到一个文件去实现那个food接口,而不是在那个接口的内部。
for (CoffeeEnum coffee : CoffeeEnum.values()) {
System.out.print(coffee + " ");
}
System.out.println();
// 搞个实现接口,来组织枚举,简单讲,就是分类吧。如果大量使用枚举的话,这么干,在写代码的时候,就很方便调用啦。
// 还有就是个“多态”的功能吧,
Food food = Food.DessertEnum.CAKE;
System.out.println(food);
food = CoffeeEnum.BLACK_COFFEE;
System.out.println(food);
}
运行结果:
【关于枚举集合的使用】
java.util.EnumSet
和java.util.EnumMap
是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。
关于枚举的实现细节和原理请参考:
参考资料:《ThinkingInJava》第四版
http://softbeta.iteye.com/blog/1185573
下面图片主要说明在使用枚举时,的规范和标准。希望可以在实际开发时候用到
最后
以上就是美丽招牌为你收集整理的枚举类(Enum) 7种常见的用法的全部内容,希望文章能够帮你解决枚举类(Enum) 7种常见的用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复