博客
关于我
JavaSE—枚举
阅读量:638 次
发布时间:2019-03-14

本文共 3480 字,大约阅读时间需要 11 分钟。

枚举(Enum)是一种在Java中定义常量的强类型,允许代码中使用这些常量来表示一系列有限的、互不相同的值。通过 enum 关键字,我们可以创建一个自定义的枚举类型,这样在代码中引用这些常量就不再是 String 或其他任意类型,而是具体的枚举类型。

1、枚举的常规用法

package test;enum Day {    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;}public class Test {    public static void main(String[] args) {        Day day = Day.MONDAY;        System.out.println(day.ordinal()); // 输出0    }}

编译器会将枚举类型 Day 生成一个继承自 java.lang.Enum 的类,因此,你可以使用 ordinal() 方法获取枚举常量的序数。

2、枚举对象的方法

每个枚举常量都有 name()toString() 方法,调用这些方法会返回该常量的文本表示。例如:

Day.MONDAY.name(); // 返回"MONDAY"Day.MONDAY.toString(); // 返回"MONDAY"

3、枚举的实际应用

枚举类型在实际开发中有很多用途,比如在 switch 语句中使用:

public class Test {    public enum Color {        RED, BLUE, GREEN    }    Color color = Color.RED;    public void change() {        switch (color) {            case RED:                color = Color.BLUE;                break;            case BLUE:                color = Color.GREEN;                break;            case GREEN:                color = Color.RED;                break;        }    }}

4、实现自定义逻辑

如果你想为枚举常量添加额外功能,可以在 enum 常量的定义后面添加逻辑。例如:

public enum Color {    RED("红色", 1), BLUE("蓝色", 2), GREEN("绿色", 3);    private String name;    private int index;    private Color(String name, int index) {        this.name = name;        this.index = index;    }    public String getName() {        return name;    }    public int getIndex() {        return index;    }    public static String getName(int index) {        for (Color c : Color.values()) {            if (c.getIndex() == index) {                return c.name;            }        }        return null;    }    @Override    public String toString() {        return super.toString();    }}

你可以通过 ordinal()name() 方法访问枚举的序号和名称,还可以通过 compareTo() 方法比较两个枚举值的顺序。

5、枚举与接口结合使用

由于 Enum 类本身已继承自 java.lang.Enum,所以我们可以让枚举类型实现接口。例如:

interface Behaviour {    void print();}public enum Color implements Behaviour {    RED("红色", 1), BLUE("蓝色", 2), GREEN("绿色", 3);    private String name;    private int index;    private Color(String name, int index) {        this.name = name;        this.index = index;    }    public String getName() {        return name;    }    public int getIndex() {        return index;    }    @Override    public void print() {        System.out.print(index + ":" + name);    }}public class Test {    public static void main(String[] args) {        Color.BLUE.print(); // 输出"2:蓝色"    }}

6、在接口中声明枚举

有时候,我们可能会把枚举类型定义在接口中,这样可以让所有实现该接口的类都共享相同的枚举值。例如:

interface Thing {    enum Mobile implements Thing {        SamSung("三星"), Apple("6");        private String type;        private Mobile(String type) {            this.type = type;        }        public String getType() {            return type;        }    }}public class Test implements Thing {    public static void main(String[] args) {        System.out.println(Mobile.SamSung.getType());    }}

7、枚举集合和映射

为了更高效地工作sWith枚举值,可以使用 java.util.EnumSetjava.util.EnumMap 这些辅助类。EnumSet 可以确保集合中仅包含枚举值,而 EnumMap 则可以使用枚举类型作为键。

例如:

import java.util.EnumSet;import java.util.EnumMap;public class Test {    public enum Direction { LEFT, RIGHT, UP, DOWN }    public static void main(String[] args) {        EnumSet
directions = EnumSet.of(Direction.LEFT, Direction.RIGHT); System.out.println(directions); // 输出{LEFT, RIGHT} EnumMap
map = new EnumMap
(); map.put(Direction.LEFT, "左"); map.put(Direction.RIGHT, "右"); System.out.println(map.get Direction.LEFT); // 输出"左" }}

转载地址:http://widlz.baihongyu.com/

你可能感兴趣的文章
oracle 逻辑优化,提升高度,综合SQL上下文进行逻辑优化
查看>>
oracle 闪回关闭,关闭闪回即disable flashback的操作步骤
查看>>
oracle 限制用户并行,insert /*parallel */ 到不同用户,并行起不来的问题
查看>>
oracle--用户,权限,角色的管理
查看>>
oracle00205报错,Oracle控制文件损坏报错场景
查看>>
Oracle10g EM乱码之快速解决
查看>>
Oracle10g下载地址--多平台下的32位和64位
查看>>
Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
查看>>
Oracle11G基本操作
查看>>
Oracle11g服务详细介绍及哪些服务是必须开启的?
查看>>
Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统
查看>>
oracle12安装软件后安装数据库,然后需要自己配置监听
查看>>
Oracle——08PL/SQL简介,基本程序结构和语句
查看>>
Oracle——distinct的用法
查看>>
Oracle、MySQL、SQL Server架构大对比
查看>>
oracle下的OVER(PARTITION BY)函数介绍
查看>>
Oracle中DATE数据相减问题
查看>>
Oracle中merge into的使用
查看>>
oracle中sql查询上月、本月、上周、本周、昨天、今天的数据!
查看>>
oracle中sql的case语句运用--根据不同条件去排序!
查看>>