公司新来一个同事,把枚举运用得炉火纯青...

伺服电机开发实战指南 伺服电机作为工业自动化的核心部件,正经历前所未有的技术革新。本文从基础原理出发,详细介绍了伺服电机的分类、工作原理和特性,分析了伺服电机系统组成与核心部件,探讨了企业级开发技术,包括控制算法、通信协议和故障诊断等高级功能,并提供了实战案例分析,从行业应用到具体开发步骤,展示了伺服电机的工程实现。通过深入理解伺服电机的原理、掌握开发技术、学习应用案例,可以实现伺服系统的高性能开发与应用。 阅读详情

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:JAVA旭阳

d200a251a345b7021c7eab1061480b18.jpeg


Java中的枚举,大家在项目中经常使用吧,主要用来定义一些固定值,在一个有限的集合内,比如在表示一周的某一天,一年中的四季等。那你了解枚举的本质吗,或者说底层是什么样的?了解枚举的一些神仙用法吗?

枚举主要用来定义一个有限集合内的固定值。

枚举定义方式如下:

// 简单的定义
enum WeekEnum {
    MONDAY, TUESDAY
}

// 有属性的定义
enum StatusEnum {
    ENABLE("1", "启用"), DISABLE("0", "禁用");

    private String code;

    private String name;

    StatusEnum(String code, String name) {
        this.code = code;
        this.name = name;
    }
}

枚举编译后实际上继承了java.lang.Enum这个类,后面详细讲解,我们看下这个类的关键方法:

  • static Enum valueOf(Class enumClass, String name)

返回指定名字、给定类的枚举常量

  • String toString()

返回枚举常量名

  • int ordinal()

返回枚举常量在enum中的位置,从0开始

  • int compareTo(E other)

如果枚举场景出现在other之前,则返回一个负值,如果this == other,则返回0,否则返回正值。

public static void main(String[] args) {
        // 根据字符串获取枚举
        StatusEnum enable = Enum.valueOf(StatusEnum.class, "ENABLE");
        System.out.println(enable);
        //枚举比较直接用==
        System.out.println(enable == StatusEnum.ENABLE);

        // values方法获取所有的枚举
        StatusEnum[] values = StatusEnum.values();
        for (StatusEnum statusEnum : values) {
            // 打印枚举的位置
            System.out.println(statusEnum.ordinal());
        }
    }

运行结果:

a463d7175bcc4981070aef016be7fbee.png

枚举的本质

枚举的本质其实是一个类,继承了java.lang.Enum这个类。我们可以用idea的插件看下生成的字节码如下:

  1. 继承了java.lang.Enum

56e060c44bb5ec9cb03c257b26dba682.png
  1. ENABLE、DISABLE最终转换为静态字段,类型其实StatusEnum这个类

7340681784499d40c42a12fbd6295de7.png
  1. 类加载的时候初始化ENABLE、DISABLE这两个属性。

38a5a8f07d460b2d72dcd25300a8208c.png

方法是类加载的初始化阶段就是执行的,它这里的主要逻辑就是创建了两个对象,设置到ENABLE,DISABLE上。

这下你明白枚举是怎么一会事情了吧。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

枚举常见用途

枚举创建单例

枚举可以作为单例模式的最佳方式,能够保证单例对象的唯一性。

public class User {
    //私有化构造函数
    private User(){ }
 
    //定义一个静态枚举类
    static enum SingletonEnum{
        //创建一个枚举对象,该对象天生为单例
        INSTANCE;
        private User user;
        //私有化枚举的构造函数
        private SingletonEnum(){
            user = new User();
        }
        public User getInstnce(){
            return user;
        }
    }
 
    //对外暴露一个获取User对象的静态方法
    public static User getInstance(){
        return SingletonEnum.INSTANCE.getInstnce();
    }
}
  • 枚举INSTANCE会在类加载初始化的时候创建,而Java类的加载和初始化过程都是线程安全的。

  • 枚举可避免反序列化破坏单例。

枚举抽象方法

枚举类可以定义抽象方法,然后让各个具体的枚举实现,可以通过枚举实现不同的策略实现。

enum OperEnum {
    ADD(1, 2) {
        @Override
        public Integer operate() {
            return this.getA() + this.getB();
        }
    }, MULTIPY(1, 2) {
        @Override
        public Integer operate() {
            return this.getA() * this.getB();
        }
    };

    private Integer a;

    private Integer b;

    OperEnum(Integer a, Integer b) {
        this.a = a;
        this.b = b;
    }

    public abstract Integer operate();

    public Integer getA() {
        return a;
    }

    public void setA(Integer a) {
        this.a = a;
    }

    public Integer getB() {
        return b;
    }

    public void setB(Integer b) {
        this.b = b;
    }
}


欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

3dcca7ce6273c4f506c4792a01d70fd1.png

已在知识星球更新源码解析如下:

e740430b569271a70e022b2fee0b5f5d.jpeg

4012ca6ccfda65e1a4201a59b89cd4ce.jpeg

5d53e92bc414009f328fce52a0dac9f0.jpeg

03fa2cde377ba17eee0ee8e968491683.jpeg

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
STM32开发 -- 4G模块开发详解(1) 这部分一直再看,资料都已经整理好了,但是一直没有汇总。接下来就详细的看一下,GSM这部分是怎么实现的。 阅读详情

相关推荐

STM32F103 实例应用(10)——I2C读写24C32

一、应用简介 本文介绍24C32的读写,基于野火的软件I2C程序。 board_i2c.h /**=========================================================================== @file board_i2c.h @brief 本文件是用于I2C驱动 @author 青梅煮久 @version r0.1 @date 2021/01/13 -------------------------.

qq_34118600的博客 3447

公司新来一个小伙,把 mybatis-plus 用得炉火纯青,全公司同事开始悄悄模仿了。。...

点击关注公众号,Java干货及时推送↓推荐阅读:大厂程序员正在大溃败。。本文主要介绍 mybatis-plus 这款插件,针对 springboot 用户。包括引入,配置,使用,以及扩展等常用的方面做一个汇总整理,尽量包含大家常用的场景内容。作者:我犟不过你 原文:https://juejin.cn/post/7054726274362638350关于 mybatis-plus 是什么,不多做介...

Java技术栈,分享最主流的Java技术 215

CVPR2021 CenterPoint源码解读:从VoxelNet到两阶段优化的完整实现细节

本文深度解析了CVPR 2021 CenterPoint模型的完整实现细节,从VoxelNet体素化、稀疏卷积Backbone,到基于中心点的检测头与两阶段精修机制。文章提供了从环境搭建、数据预处理到核心代码模块(如热力图生成、关键点特征提取与MLP Refiner)的实战指南,并分享了训练策略、多任务损失调优及可视化调试等关键工程实践,助力开发者深入理解并复现这一高效的3D目标检测框架。

linux的博客 470

前同事2024年接私活已入百万,都是用这几个开源的SpringBoot项目改的(含小程序)...

点击上方蓝色“java大数据修炼之道”,选择“设为星标”每晚九点: 技术干货 ???? 必定奉上前言不得不佩服 SpringBoot 的生态如此强大,今天给大家推荐几款优秀的后台管理系统,小伙伴们再也不用从头到尾撸一个项目了。SmartAdmin我们开源一套漂亮的代码和一套整洁的代码规范,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少加班,快乐工作,热爱生活。...

hello world! 484

Ubuntu断网环境下的系统更新:apt-offline保姆级教程(附常见问题排查)

本文详细介绍了在Ubuntu断网环境下使用apt-offline进行系统更新的完整教程,包括环境准备、签名文件生成、数据传输方案对比及常见问题排查。特别适用于企业级开发环境或安全敏感场景,帮助运维人员高效完成离线系统更新,确保系统安全与稳定。

weixin_29214691的博客 362

拼团系统设计-人群标签的设计与思考

最近在学习一个拼团项目中涉及到的人群模块的设计,写下一些实现与思考。

wywcool的博客 971

Java线上开发神器:10秒实现代码热更新

点击上方蓝色“java大数据修炼之道”,选择“设为星标”每晚九点: 技术干货 ???? 必定奉上分享一个很好用的热更新插件ArthasHotSwap:https://github.com/xxxtai/ArthasHotSwap我们在测试环境进行开发调试的时候,会有想要热更新几个文件的需求例如想要把下面的张三改成李四如果只是做了一小部分的修改,就去重新发布的,有点得不偿失(因为发布常常得几分钟甚至十几...

hello world! 209

STM32开发者必看:如何在正点原子探索者开发板上快速移植CANopenNode协议栈

本文为STM32开发者提供了在正点原子探索者开发板上快速移植CANopenNode协议栈的实战指南。文章详细介绍了从环境准备、硬件抽象层适配到协议栈初始化与测试的全过程,并分享了PDO配置与性能优化等关键技巧,帮助开发者高效实现CANopen标准化通信。

weixin_29173777的博客 465

try catch 应该在 for 循环里面还是外面?

往期热门文章: 1、困扰我 1 小时的 404 错误 别人 1 分钟解决了 2、公司新来一个同事,把枚举运用得炉火纯青... 3、Java8 中一个极其强悍的新接口,很多人没用过 4、SpringBoot接口防抖(防重复提交)的一些实现方案 5、入职第一天,看了公司代码,牛马沉默了...作者:小目前青年来源:blog.csdn.net/qq_35387940/article/details/12...

Java后端技术 2840

MediaPipeUnityPlugin(最新版)摇摆拳人脸识别

MediaPipeUnityPlugin(最新版)摇摆拳人脸识别

不忘初心 方得始终 2984

PPT+视频 | 详解智能营销增益模型(uplift model)

分享营销增益模型的原理和常见的建模及评估方法,并以淘票票智能票补为例介绍uplift model技术的实践经验。

阿里文娱技术 8628

Git 代码提交规范:feat、fix、chore 都是什么意思?

点击上方蓝色“java大数据修炼之道”,选择“设为星标”每晚九点: 技术干货 ???? 必定奉上写在前面经常看到别人提交的代码记录里面包含一些feat、fix、chore等等,而我在提交时也不会区分什么,直接写下提交信息,今天就来看一下怎么个事,就拿 element-plus/ant-design 来看一下。其实这么写是一种代码提交规范,当然不是为了炫技,主要目的是为了提高提交记录的可读性和自动化处理...

hello world! 4000

高通开发系列 - Camera之摄像头调试记录

记录一些调试内容

fulinux的博客 1220

困扰我 1 小时的 404 错误 别人 1 分钟解决了

往期热门文章: 1、公司新来一个同事,把枚举运用得炉火纯青... 2、Java8 中一个极其强悍的新接口,很多人没用过 3、SpringBoot接口防抖(防重复提交)的一些实现方案 4、入职第一天,看了公司代码,牛马沉默了... 5、动态上传jar包热部署,看完还不会吗?来源:juejin.cn/post/7362722064069427237上周五遇到了一个 Bug,没有任何异常,困扰了我一个...

Java后端技术 635

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Guava的这些骚操作,让我的代码量减少了50%

往期热门文章: 1、告别类型错误:Java泛型上下界,这些坑你千万别踩! 2、try catch 应该在 for 循环里面还是外面? 3、困扰我 1 小时的 404 错误 别人 1 分钟解决了 4、公司新来一个同事,把枚举运用得炉火纯青... 5、Java8 中一个极其强悍的新接口,很多人没用过来源:码农参上Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了...

Java后端技术 388

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

告别类型错误:Java泛型上下界,这些坑你千万别踩!

往期热门文章: 1、try catch 应该在 for 循环里面还是外面? 2、困扰我 1 小时的 404 错误 别人 1 分钟解决了 3、公司新来一个同事,把枚举运用得炉火纯青... 4、Java8 中一个极其强悍的新接口,很多人没用过 5、SpringBoot接口防抖(防重复提交)的一些实现方案来源:juejin.cn/post/7022581523048038408准备工作有如下类的继承关...

Java后端技术 525

服务down机了,线程池中的数据如何保证不丢失?

往期热门文章: 1、Guava的这些骚操作,让我的代码量减少了50% 2、告别类型错误:Java泛型上下界,这些坑你千万别踩! 3、try catch 应该在 for 循环里面还是外面? 4、困扰我 1 小时的 404 错误 别人 1 分钟解决了 5、公司新来一个同事,把枚举运用得炉火纯青...前言最近有位小伙伴在我的技术群里,问了我一个问题:服务down机了,线程池中如何保证不丢失数据?这个问...

Java后端技术 503

每天骑的共享单车是什么通信原理,有人了解过吗?

点击上方蓝色“java大数据修炼之道”,选择“设为星标”每晚九点: 技术干货 ???? 必定奉上来源:土豆居士一、智能车锁二、芯片供电三、扫码解锁四、支付系统五、蓝牙模块六、GPS定位七、物联网技术我们经常骑的共享单车到底是什么通信原理,有人了解过吗?下面宝蓝小编就带大家了解下。一、智能车锁共享单车最核心的硬件是智能车锁,主要用于实现控制和定位功能。车锁内集成了嵌入式芯片(通信模块),GPS模块和物联...

hello world! 293

java后端

java笔记

qq_33803292的博客 401
上一篇: 微服务下必须了解的4种部署策略!
下一篇: AI,正在疯狂污染中文互联网
公众号-芋道源码
博客等级 码龄10年 1636粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值