java最简单的enum类使用说明

本文介绍了枚举类型(enum)的基本用法及其在代码中的优势。包括提高代码可读性、简化状态码管理和方便调试等方面。同时提供了两种不同复杂度的枚举类型示例,并列举了使用枚举时需要注意的事项。

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

[尊重一点点努力,转载请注明出处http://blog.youkuaiyun.com/luochoudan/article/details/71305652]
写代码的过程中,使用到enum,忽然发现对这个类有点陌生了,所以总结了一下它的基本用法。

为什么要用enum?

这个问题,笔者曾在问答区回答过码友。之所以使用enum,很多时候是用来代替常量(本质是一种特殊的常量),归结起来,大概有以下几点:

  • 拒绝硬编码,让代码变的更可读、更健壮、更优雅。想必大家读代码都有过被一堆乱七八糟的常量折磨的经历,要是再没有注释,难保不会骂娘。enum的出现,方便了常量的统一管理,避免重复定义,同时也能方便地常量添加具体的语意;

  • 一个key多个value时特别有用。比如常见的状态码,可能有许多值。如果使用常量描述的话,必然是很大一坨。解析状态码代表的语义时也少不了一堆if-else。eunm可以将这些状态收敛在同一个类中,并可以将状态码的解析放在enum内部实现,更符合单一职责的原则。

  • 方便调试和日志。如果是常量,字符串还好说,数字可就唧唧了,迷之代码必然会给调试带来不少麻烦。

怎么使用enum?

enum的使用很简单,它本质是一种特殊的类,你可以为它添加构造器,添加任何你想实现的功能函数,甚至添加内部类等等。

为了更直观地说明,不妨通过两段代码来看一下它的日常用法。

最简单的:

public enum Month { 
    //值之间用","隔开,用";"收尾
    MON, TUE, WED;
}

升级版的:

public enum Month {
        //enum的值在第一位
        MON(1 , "一月"), TUE(2 , "二月"), WED(3 , "三月");

        //构造器和常量必须写在值后面
        private int code;
        private String description;
        Month(int code,String description){
            this.code = code;
            this.description = description;
        }

        //根据code找到要呈现给用户的description;这个转化应该收敛在Month内部实现
        public static String getDescription(int code){
            //遍历
            for(Month month : Month.values()){
                if(month.code == code){
                    return month.description;
                }
            }
            return null;
        }

        @Override
        public String toString(){
            return code + " : " + description;
        }
    }

掌握这两种写法,基本能满足日常开发需要。有两点注意一下:

  • enum的值一定放在最前面,之间一定用”,”隔开,用”;”收尾;

  • 自定义构造器必须要放在值后面。

enum使用注意

  • enum默认继承了抽象类Enum,不可再继承别的类,但可自由实现接口;

  • enum的构造器默认是private,所以在写构造函数时,可以不加修饰词,要加也只能是private;

  • enum是一种特殊的常量,可以使用==或者euqal比较两个值是否相等;

  • Java定义了两个关于enum的集合类,EnumSet和EnumMap。使用的时候要注意一个集合内只能有一种Enum的不同值;

  • enum中不能存在main函数;

  • 尽量给每个enum值添加注释,除非字面意思十分明显的,避免日后懵逼;

  • 用enum实现单例,不但线程安全而且还能反序列化,是很多教材推荐的一种单例实现。

### Java 枚举(enum)概述 Java枚举是一种特殊的数据型,它允许开发者定义一组固定的常量集合。这种数据型的引入提供了更加强大和型安全的方式处理固定数量的状态或选项[^2]。 ### 定义简单的枚举 最基础的形式如下所示: ```java public enum Color { RED, GREEN, BLANK, YELLOW; } ``` 上述代码片段展示了如何声明一个名为`Color`的简单枚举型,并初始化四个成员:RED、GREEN、BLANK 和YELLOW[^1]。 ### 使用 switch 语句操作枚举 当需要根据不同枚举值执行特定逻辑时,可以利用 `switch` 结构来简化条件判断过程: ```java Color color = ... ; // 假设这里已经赋予了一个具体的颜色值 switch (color){ case RED: System.out.println("The color is Red"); break; case GREEN: System.out.println("The color is Green"); break; default: System.out.println("Other colors..."); } ``` 这段程序会依据传入的颜色参数打印对应的信息。 ### 枚举作为的功能扩展 除了基本功能外,还可以像对待常规一样向枚举添加字段、构造函数甚至方法。值得注意的是,由于Java支持单继承特性,因此枚举无法通过`extends`关键字直接派生自另一个父;不过仍然可以通过实现接口增加行为抽象层次[^3]。 #### 示例:带额外信息的复杂枚举 下面的例子说明了怎样构建具有更多特性的枚举实例——不仅限于名称列表,还包含了描述文字和其他辅助工具方法。 ```java // 定义一个带有额外属性的方法 public enum Planet { MERCURY(3.30E23), VENUS(4.87E24), EARTH(5.98E24); private final double mass; // 行星质量 Planet(double mass) { this.mass = mass; } public double getMass() { return mass; } } // 调用方式 System.out.printf("%.2f",Planet.EARTH.getMass()); ``` 此段代码实现了行星及其质量之间的映射关系,并提供获取指定星球质量的服务。 ### 遍历枚举中的所有项 有时可能希望一次性访问整个枚举集内的每一个元素,在这样的场景下就可以借助静态方法values()轻松完成迭代工作[^4]: ```java for(Color c : Color.values()){ System.out.println(c); } ``` 以上就是关于Java中枚举的一些核心概念与实践技巧介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值