为什么建议你使用枚举?(中)

简介: 为什么建议你使用枚举?

用法五:实现接口


枚举类可以用来实现接口,但不能用于继承类,因为枚举默认继承了 java.lang.Enum 类,在 Java 语言中允许实现多接口,但不能继承多个父类,实现代码如下:


public class EnumTest {
    public static void main(String[] args) {
        ColorEnum colorEnum = ColorEnum.RED;
        colorEnum.print();
        System.out.println("颜色:" + colorEnum.getInfo());
    }
}
interface Behaviour {
    void print();
    String getInfo();
}
enum ColorEnum implements Behaviour {
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLOW("黄色", 4);
    private String name;
    private int index;
    private ColorEnum(String name, int index) {
        this.name = name;
        this.index = index;
    }
    @Override
    public void print() {
        System.out.println(this.index + ":" + this.name);
    }
    @Override
    public String getInfo() {
        return this.name;
    }
}


以上程序的执行结果为:


1:红色

颜色:红色


用法六:在接口中组织枚举类


我们可以在一个接口中创建多个枚举类,用它可以很好的实现“多态”,也就是说我们可以将拥有相同特性,但又有细微实现差别的枚举类聚集在一个接口中,实现代码如下:


public class EnumTest {
    public static void main(String[] args) {
        // 赋值第一个枚举类
        ColorInterface colorEnum = ColorInterface.ColorEnum.RED;
        System.out.println(colorEnum);
        // 赋值第二个枚举类
        colorEnum = ColorInterface.NewColorEnum.NEW_RED;
        System.out.println(colorEnum);
    }
}
interface ColorInterface {
    enum ColorEnum implements ColorInterface {
        GREEN, YELLOW, RED
    }
    enum NewColorEnum implements ColorInterface {
        NEW_GREEN, NEW_YELLOW, NEW_RED
    }
}


以上程序的执行结果为:


RED

NEW_RED


用法七:使用枚举集合


在 Java 语言中和枚举类相关的,还有两个枚举集合类 java.util.EnumSetjava.util.EnumMap,使用它们可以实现更多的功能。


使用 EnumSet 可以保证元素不重复,并且能获取指定范围内的元素,示例代码如下:


import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
public class EnumTest {
    public static void main(String[] args) {
        List<ColorEnum> list = new ArrayList<ColorEnum>();
        list.add(ColorEnum.RED);
        list.add(ColorEnum.RED);  // 重复元素
        list.add(ColorEnum.YELLOW);
        list.add(ColorEnum.GREEN);
        // 去掉重复数据
        EnumSet<ColorEnum> enumSet = EnumSet.copyOf(list);
        System.out.println("去重:" + enumSet);
        // 获取指定范围的枚举(获取所有的失败状态)
        EnumSet<ErrorCodeEnum> errorCodeEnums = EnumSet.range(ErrorCodeEnum.ERROR, ErrorCodeEnum.UNKNOWN_ERROR);
        System.out.println("所有失败状态:" + errorCodeEnums);
    }
}
enum ColorEnum {
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLOW("黄色", 4);
    private String name;
    private int index;
    private ColorEnum(String name, int index) {
        this.name = name;
        this.index = index;
    }
}
enum ErrorCodeEnum {
    SUCCESS(1000, "success"),
    ERROR(2001, "parameter error"),
    SYS_ERROR(2002, "system error"),
    NAMESPACE_NOT_FOUND(2003, "namespace not found"),
    NODE_NOT_EXIST(3002, "node not exist"),
    NODE_ALREADY_EXIST(3003, "node already exist"),
    UNKNOWN_ERROR(9999, "unknown error");
    private int code;
    private String msg;
    ErrorCodeEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public int code() {
        return code;
    }
    public String msg() {
        return msg;
    }
}


以上程序的执行结果为:


去重:[RED, GREEN, YELLOW]

所有失败状态:[ERROR, SYS_ERROR, NAMESPACE_NOT_FOUND, NODE_NOT_EXIST, NODE_ALREADY_EXIST, UNKNOWN_ERROR]


EnumMapHashMap 类似,不过它是一个专门为枚举设计的 Map 集合,相比 HashMap 来说它的性能更高,因为它内部放弃使用链表和红黑树的结构,采用数组作为数据存储的结构。


EnumMap 基本使用示例如下:


import java.util.EnumMap;
public class EnumTest {
    public static void main(String[] args) {
        EnumMap<ColorEnum, String> enumMap = new EnumMap<>(ColorEnum.class);
        enumMap.put(ColorEnum.RED, "红色");
        enumMap.put(ColorEnum.GREEN, "绿色");
        enumMap.put(ColorEnum.BLANK, "白色");
        enumMap.put(ColorEnum.YELLOW, "黄色");
        System.out.println(ColorEnum.RED + ":" + enumMap.get(ColorEnum.RED));
    }
}
enum ColorEnum {
    RED, GREEN, BLANK, YELLOW;
}


以上程序的执行结果为:


RED:红色



相关文章
|
2月前
|
安全 Java 索引
枚举的使用
枚举的使用
|
3月前
|
Java C语言 Spring
枚举
【2月更文挑战第4天】枚举。
29 4
|
9月前
|
安全 索引
|
存储 JavaScript 前端开发
枚举(enumerables)
枚举(enumerables)
88 0
|
算法 安全 小程序
使用枚举的正确姿势
使用枚举的正确姿势
239 0
使用枚举的正确姿势
|
安全 Java 程序员
为什么建议你使用枚举?(下)
为什么建议你使用枚举?
204 0
为什么建议你使用枚举?(下)
|
Java C# Python
为什么建议你使用枚举?(上)
为什么建议你使用枚举?
120 0
为什么建议你使用枚举?(上)
|
Java Spring 安全
Java基础巩固-枚举的使用
枚举:jdk1.5引入的新特性,允许用常量表示特定的数据片段,且全一类型安全的形式来表示。 常用的定义常量方式 public static final xxx .
1074 0