java中的枚举类型学习_weixin_34293902的博客-程序员秘密

技术标签: java  

枚举,在java中看似很小的一部分,却帮我们解决了很多大问题。

为什么使用枚举

我们知道生活中的很多地方都可以使用枚举,但是很多人在实际编程的时候却很少使用枚举类型,是因为枚举类型不好用吗?我认为不是的,而是他们并不了解枚举。这也是我之前的状态。

不使用枚举,对status(状态)等一些数目有限的对象,我们通常会使用静态常量的形式来表示,比如下面这样:

public class Test() {
    private static final int CHECK_APPOINTMENT = 1;              // 预约中
    private static final int CHECK_PENDING_FEEDBACK = 2;         // 待反馈
    private static final int CHECK_FEEDBACK = 3;                 // 已反馈
    private static final int CHECK_ADMISSIBLE = 4;               // 已受理
    private static final int CHECK_ALREADY_CHECKED = 5;          // 已检定
    private static final int CHECK_RESERVATION_FAILURE = 6;      //预约失败
    ...
} 

这时候,就会这么使用这些变量:

test.setStauts(Test.CHECK_APPOINTMENT);

好,这样按规矩来,没有任何问题,这样写的基础是建立在小组中的每个人都对项目有足够的了解,并且记忆力还不能太差了。但是就怕有些人不安规矩来:

test.setStatus(123);

完了,傻眼了。所以这就体现了枚举类型比静态常量更加的安全。

枚举类型

我们这里说的枚举类型是enum类,和classinterface地位相同。

下面介绍几种简单的枚举类型的用法。

1.一般用法

还是上面的例子,我们将它换成是枚举类型。

public enum ProcessStatusCode {
    CHECK_APPOINTMENT("预约中(待预约)", (short)1),
    CHECK_PENDING_FEEDBACK("待反馈", (short)2),
    CHECK_FEEDBACK("已反馈(待受理)", (short)3),
    CHECK_ADMISSIBLE("已受理(待检定)", (short)4),
    CHECK_ALREADY_CHECKED("已检定(检定完成)", (short)5),
    CHECK_RESERVATION_FAILURE("预约失败", (short)6);
    
    private Short code;     // 代码
    private String name;    // 名称
    
    processStatusCode(String name, Short code) {
        this.name = name;
        this.code = code;
    }
}

首先,先定义枚举类型,需要说明的是,这里必须在开头就定义具体实例,然后才是定义变量,以及构造函数。

并且我们可以看到,在定义实例的时候,我们调用了构造函数,但是这是一种隐式的调用。

调用的时候很简单:

ProcessStatusCode.CHECK_APPOINTMENT

2.switch中使用枚举

switch语句使用枚举类型是再合适不过的了,这可以大大的增加代码的易读性。

enum Signal {  
    GREEN, YELLOW, RED  
}  
public class TrafficLight {  
    Signal color = Signal.RED;     // 初始化信号灯颜色
     
    public void change() {  
        switch (color) {  
        case RED:  
            color = Signal.GREEN;  
            break;  
        case YELLOW:  
            color = Signal.RED;  
            break;  
        case GREEN:  
            color = Signal.YELLOW;  
            break;  
        }  
    }  
}

我们看到,在switch...case语句使用枚举类型的时候,case中的值直接使用枚举类型的具体实例,这点与上面的有一点不同。

3.枚举类型中定义函数

与类相同,我们也是可以在枚举中定义自己的函数的。

public enum Color {  
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
    // 成员变量  
    private String name;  
    private int index;
      
    // 构造方法  
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }  
     
    public void display() {
        System.out.println("这是" + this.name + "色");
    }
} 

总结

我们说,什么是规范?规范就是一个团队写的代码像一个人写的一样。所以很多时候,虽然我们可以有很多的不同的方法去实现一个需求,但为什么我们经常能够听到说“这种写法更好”这样的话,就是为了让我们写出的代码更加容易理解,更加易读。

但是相反的,人们总是难免会有自己的想法,这样就不利于代码的一致性。而我们又需要这种一直性,所以就 有了想枚举类型这样的限制一些自己想法的东西出现了。

代码规范的出现,是因为有了合作的关系。现在的软件已经越来越多的是由团队进行编写,而不是一个人的工作,所以我们应该更加重视代码规范。


参考:https://blog.csdn.net/qq_2709...

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34293902/article/details/88716054

智能推荐

pycharm未识别python工具库的解决方法_pycharm无法识别python_初入运维大头菜的博客-程序员秘密

pycharm未识别python工具库的解决方法本人遇到了已经安装了python工具库,但pycharm没有识别到的情况。后来发现,原来是我设置的运行环境没有选对。我的工具库安装在conda创建的新的虚拟环境中,而pycharm使用的还是默认的运行环境,所以才出现这个问题。解决办法:依次点击->file->Settings…->Project:工程名->Project Interpreter,在右侧点击设置图标->Add…,选择Existing environment,将

Web 存储对象localStorage并sessionStorage允许在浏览器中保存键/值对_组合成键值对放入localstorage_allway2的博客-程序员秘密

Web 存储对象localStorage并sessionStorage允许在浏览器中保存键/值对。它们的有趣之处在于,数据在页面刷新(对于sessionStorage)甚至完全浏览器重新启动(对于localStorage)后仍然存在。我们很快就会看到。我们已经有了 cookie。为什么要附加对象?与 cookie 不同,Web 存储对象不会随每个请求一起发送到服务器。正因为如此,我们可以存储更多。大多数浏览器允许至少 2 兆字节(或更多)的数据,并具有配置它的设置。 与 cookie 不同..

FFmpeg在Ubuntu下的安装及常见视频处理方法_羁士的博客-程序员秘密

一、安装可通过PPA进行安装sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-nextsudo apt-get updatesudo apt-get install ffmpeg二、相关概念比特率比特率,是一个决定音视频总体质量的参数。他决定每个时间单位处理的bit数,英文为 bit rate,描

python贪吃蛇的实验报告_贪吃蛇游戏课程设计实验报告_郑小塔的博客-程序员秘密

DOC可编辑修改--------为你整理各种最新最全办公范文--------双击可以删除爱心---用心---恒心贪吃蛇游戏课程设计实验报告辽宁科技大学课程设计说明书设计题目:基于C#的贪吃蛇游戏学院、系:装备制造学院专业班级:计算机科学与技术学生姓名:叶佳佳指导教师:丁宁成绩:20XX年12月12日目录一、概述...............................................

关于App自动化执行链接Appium服务包名正确但是报错An unknown server-side error occurred while processing the command_CesareCheung的博客-程序员秘密

在执行链接Appuim服务时连接失败可能原因:连接失败如图![在这里插入图片描述](https://img-blog.csdnimg.cn/20190305134635369.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpb...

随便推点

允许 使用接口传递对象,为什么?_weixin_30384031的博客-程序员秘密

第一次使用观察者模式时,碰到了使用 接口传递对象的例子,一开始只是使用,并没有想为什么但总觉得通过接口来传递对象怪怪的,识别对象的应该是属性啊,怎么接口也可以用来识别对象的类型呢?最近偶然有些想法:打个比方,就拿我们这个社会来说,可以按照属性来划分人的种类:黄种人、白种人,男人,女人等等也可以按照 人的技能来划分:程序员,工程师,演员,政客程序员会编程,工程师会××,演员会演戏,政客会玩政治……转...

致第一次安装RIME的你_weixin_30558305的博客-程序员秘密

转载自百度RIME吧,作者:半月湾C原帖地址:http://tieba.baidu.com/p/3288634121序言很喜欢小狼毫输入法,喜欢他的简洁,美观以及超强悍的个人定制功能。关于 RIME输入法。大家都已经争执许多了,没有用户交互界面,导致许多想要使用 RIME 输入法的人最终放弃。吧里有人说, RIME 输入法只是用给程序使用的,因为它实在是太折腾了,貌似只有程序员才能...

c语言玫瑰花数有什么作用,玫瑰花的功效与作用_力泰及的博客-程序员秘密

玫瑰花的功效与作用《本草纲目拾遗》载玫瑰“和血行血,理气,治风痹,噤口痢,乳痈,肿毒初起,肝胃气痛。”人们多取其“理气解郁、和血散瘀”的作用治疗慢性胃炎、肝炎、跌打损伤、月经不调、乳痈等,近年来也有用于治疗抑郁症。现研究发现其主要成分为香茅醇、橙花醇、丁香油酚、苯乙醇等,并含有挥发油。那么玫瑰花的功效与作用你真的了解吗?下文yjbys小编为大家分享玫瑰花的功效及其作用,一起来看看吧!玫瑰花的功效功...

【darknet源码】:image结构体_yuanCruise的博客-程序员秘密

Darknet源码——image结构体darknet内部的image结构体定义image结构体定义在image.h,定义如下:typedef struct { int h; int w; int c; float *data;} image;从以上定义中可以看出,darknet内部使用一维数组存放图像像素数据。与OpenC...

Oracle 8.1.7 安装文档(for Solaris 8/9)_oracle8.1.7_Y1ch0的博客-程序员秘密

Oracle 8.1.7 安装文档(for Solaris 8/9)一、安装前的准备 1、由root执行的任务(用root用户登录) 1.1 设置系统变量 1) 用文本编辑器打开"/etc/system" 文件 # vi /etc/system 2)在 "/etc/system" 文件结尾插入如下几行 set shmsys:shminfo_shmmax=42949672