枚举(是一种针对特定情况而定义的简洁安全的特定类型)

本文探讨了为何在Java中使用枚举类,特别是在对象数量有限且需要定义一组常量的情况下,枚举提供了简洁的语法和安全检查。枚举与switch结合在实际项目中效果出色。此外,文章还介绍了自定义枚举类型和使用enum关键字定义枚举,以及如何在程序中应用枚举,如定义返回值常量和实现线程安全的单例模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.为何要有枚举类

对于某一个类的对象有限且确定的情况,以及需要定义一组通用的常量的并将其作为组件供程序其他部分调用的情况,使用枚举更加简洁(写法简洁),安全(提供了安全检查的功能),当然枚举也可以用来实现责任链和多路分发

实际项目中枚举和switch的结合使用是绝配

2.枚举类的使用

2.1.自定义枚举类型
/**
 * ===========================================================
 * @function 这个类用来,自定义中国的四大神兽(有限且确定)枚举类
 * ===========================================================
 */
public class FourSacredBeasts {
    public static void main(String[] args) {
        System.out.println(FourSacredBeasts.BAIHU.toString());//FourSacredBeasts{direction='西方', elements='金'}
    }
    //1.私有化属性和构造器(不允许外部创建和修改)private final修饰属性,private 修饰构造器
    private final String direction;//每个神兽的守护方位(东南西北中)
    private final String elements;//每个神兽的属性(金木水火土)

    private FourSacredBeasts(String direction, String elements) {
        this.direction = direction;
        this.elements = elements;
    }

    //2.创建所有的枚举实例public static final修饰
    public static final FourSacredBeasts QINGLONG=new FourSacredBeasts("东方","木");
    public static final FourSacredBeasts BAIHU=new FourSacredBeasts("西方","金");
    public static final FourSacredBeasts ZUQUE=new FourSacredBeasts("南方","火");
    public static final FourSacredBeasts XUANWU=new FourSacredBeasts("北方","水");

    //创建toString方法用于测试

    @Override
    public String toString() {
        return "FourSacredBeasts{" +
                "direction='" + direction + '\'' +
                ", elements='" + elements + '\'' +
                '}';
    }
}
2.2使用enum关键字定义枚举类型(推荐)
/**
 * ===========================================================
 * @function 这个类用来,使用enum关键字来定义中国的四大神兽(有限且确定)枚举类
 * ===========================================================
 */
public enum  FourSacredBeasts {
    //1.显式列出所有的枚举对象(必须放在第一位)
    QINGLONG("东方","木"),
    BAIHU("西方","金"),
    ZUQUE("南方","火"),
    XUANWU("北方","水");

    //2.私有化属性和构造器(不允许外部创建和修改)private final修饰属性,private 修饰构造器
    private final String direction;//每个神兽的守护方位(东南西北中)
    private final String elements;//每个神兽的属性(金木水火土)

    private FourSacredBeasts(String direction, String elements) {
        this.direction = direction;
        this.elements = elements;
    }

    //创建toString方法用于测试
    @Override
    public String toString() {
        return "FourSacredBeasts{" +
                "direction='" + direction + '\'' +
                ", elements='" + elements + '\'' +
                '}';
    }

    public static void main(String[] args) {
        System.out.println(FourSacredBeasts.BAIHU); //FourSacredBeasts{direction='西方', elements='金'}
    }
}

3.程序中使用枚举

3.1 定义返回值常量

代码如下

public enum ResultCode {

    SUCCESS(200, "操作成功"),
    FAILED(201, "操作失败"),
    EMPTY_RESULT(202, "未查询到数据"),
    ERROR(999, "操作失败"),
    VALIDATE_FAILED(299, "参数检验失败"),
    VERIFY_CODE_ERROR(299, "验证码校验失败"),
    UNAUTHORIZED(900, "暂未登录或token已经过期"),
    FORBIDDEN(888, "没有相关权限"),
    USER_UNAVAILABLE(300, "用户被禁用");


    private Integer code;
    private String messange;

    ResultCode(Integer code, String messange) {
        this.code = code;
        this.messange = messange;
    }

    public Integer getCode() {
        return code;
    }

    public String getMessange() {
        return messange;
    }
}

3.2 实现单例模式

代码如下(Java虚拟机在加载枚举类的时候,会使用ClassLoader的loadClass方法,这个方法使用了同步代码块来保证线程安全)

public enum Singleton {

    INSTANCE;
    
    public void explain() {
        System.out.println("我是唯一实例,且线程安全");
    }
    //测试方法
    public static void main(String[] args) {
        INSTANCE.explain();//我是唯一实例,且线程安全
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值