专栏首页eclipse编程干货|2分钟彻底搞懂java中的枚举

干货|2分钟彻底搞懂java中的枚举

枚举,是一个集合。当一个变量具有固定取值时,我们就将它定义为枚举类型。例如四季有春夏秋冬,性别有男女。

1

声明

1. 关键字:enum

声明枚举时必须使用 enum 关键字

/**
 * 季节枚举
 */
public enum SeasonEnum {
    SPRING,SUMMER,AUTUMN,WINTER;
}
/**
 * 结果枚举
 */
public enum ResultEnum {
    SUCCESS,FAIL;
}

2

使用

1. 理解枚举

我们可以把枚举看作一种,里面的成员是它的几个固定对象

例如SeasonEnum季节枚举,SPRING等就是它的固定对象。因为枚举中所有的成员都是被public static final 修饰的,就像

public class Season {
    public static final String SPRING = "SPRING";
    public static final String SUMMER = "SUMMER";
    public static final String AUTUMN = "AUTUMN";
    public static final String WINTER = "WINTER";

    public static void main(String[] args) {
        System.out.println(Season.AUTUMN);
    }
}

所以可以用【枚举名.对象名】直接获取枚举,返回值就是一个枚举类

public enum SeasonEnum {
    SPRING,SUMMER,AUTUMN,WINTER;

    public static void main(String[] args) {
        SeasonEnum season = SeasonEnum.SPRING;
    }
}

2. 自定义属性

枚举中我们还可以给这些固定对象自定义属性。例如给枚举自定义key和name属性。对了别忘记添加构造方法和set()、get()方法。

/**
 * 季节枚举
 */
public enum SeasonEnum {
    SPRING(1,"春天"),
    SUMMER(2,"夏天"),
    AUTUMN(3,"秋天"),
    WINTER(4,"冬天");
    private Integer key;
    private String name;

    SeasonEnum(Integer key, String name) {
        this.key = key;
        this.name = name;
    }

    public Integer getKey() {
        return key;
    }

    public void setKey(Integer key) {
        this.key = key;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

自定义属性有什么用呢?其实就是方便存储数据。例如你设计了一个图片表,需要存储图片所在的季节。

一般人常用的做法可能是:

Image image=new Image();
image.setSeason(1);

但是有时候我们会忘记1、2、3这些数字表示的是什么,所以很容易造成数据错误。有了枚举之后,就方便的多了。我们可以这样:

Image image=new Image();
image.setSeason(SeasonEnum.SPRING.getKey());

其中SeasonEnum.SPRING.getKey()的值是 1。

同样SeasonEnum.SUMMER.getKey()的值是2。这样我们保存数据的时候就不会出错了。

3. 自定义方法

public static String getNameByKey(Integer season){
        for (SeasonEnum seasonEnum : SeasonEnum.values()) {
            if(seasonEnum.getKey().equals(season)){
               return  seasonEnum.getName();
            }
        }
        return "";
    }

工作中最常用的自定义方法就是这个方法了。

其中.values()方法返回这个枚举的所有对象。getNameBykey()这个方法就是通过一个数字获取它对应的季节。

例如你传一个1给你返回一个“春天”,这要比你写一堆if/else效果好多了。

-END-

本文分享自微信公众号 - eclipse编程(eclipsecamp),作者:一颗雷布斯

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 线程休眠只会用 Thread.sleep?来,教你新姿势!

    线程休眠是 Java 开发经常会用到的一个手段,就是让当前线程睡一会儿,睡醒之后再继续运行。

    Java技术栈
  • 优秀的程序员真的不写注释吗?

    我在很多地方看到这样一个观点,“请停止写注释,因为只有烂的代码才需要注释。”这个观点非常巧妙,它让我想起了孟子的一句话,“杨氏为我,是无君也;墨氏兼爱,是无父也...

    沉默王二
  • 做全栈攻城狮-安卓开发教程目录

    1.程序员带你学习安卓开发,十天快速入门-安卓学习必要性:http://www.toutiao.com/i6319356348286894594/

    做全栈攻城狮
  • C语言知识汇总,史上最全面总结,没有之一

    C语言中文社区
  • 夯实Java基础系列14:深入理解Java枚举类

    枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。

    Java技术江湖
  • StringBuffer 和 StringBuilder 的 3 个区别!

    这么简单的一道题,栈长在最近的面试过程中,却经常遇到很多求职者说反,搞不清使用场景的情况。

    Java技术栈
  • Branch and Cut、Branch and Price、Lagrange Relaxation求解TSP

    在boss的吩咐下,小编在这几天恶补了Branch and Cut、Branch and Price、Lagrange Relaxation这三个算法(其中Br...

    用户1621951
  • 干货 | Branch and Price算法求解VRPTW问题(附JAVA代码分享)

    前两天小编刚忙完手头上的事情,闲了下来,然后顺便研究了一下Branch and Price的算法。刚好,国内目前缺少这种类型算法的介绍和代码实现,今天就给大家分...

    用户1621951
  • 推荐 | 6月份最值得看的 Java 技术干货

    6月过完了,这一年都 TM 过了一半了,大家都回想下自己这大半年,你都收获了什么??技术有提升吗?对象搞定了吗?

    Java技术栈
  • 仿盘和诈骗项目横行,NFT治理将走向何方?

    8月23日,Visa宣布以15万美元购入一枚CryptoPunk,由此引发抢购热潮,23日CryptoPunks成交额27821ETH,约合9222万美元。单日...

    区块链大本营
  • 终极篇:3分钟搞定GO/KEGG功能富集分析-气泡图

    干货预警:3分钟搞定GO/KEGG功能富集分析(2),给大家详细讲解了DAVID网站的使用,通过分步操作,带领大家学习了使用DAVID工具来进行GO和KEGG分...

    用户6317549
  • 22G的算法导论+算法基础+算法精讲!干货三连击,让你从基础连跳至实战!

    上周有群友向场主要算法的干货资料,场主花了十几分钟,终于找到了深埋网盘底部的一整套完整算法教程视频。

    养码场
  • 夯实Java基础系列14:深入理解Java枚举类

    本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

    Java技术江湖
  • 最新 Spring 系列教程,都在这了!

    以下是Java技术栈微信公众号发布的关于 Spring/ Spring MVC/ Spring Boot/ Spring Cloud 的技术干货,本文长期更新,...

    Java技术栈
  • 再探列生成(Column Generation)算法求解VRPTW松弛模型(附java源代码)

    眼看着寒假快结束,小编也赶紧抓住寒假的尾巴,快马加鞭地学习了一下列生成(Column Generation)的方法,并结合往期公众号的代码:

    用户1621951
  • CTO写的代码,真是绝了!

    本文通过一个简单的例子来展示如何通过枚举巧妙地干掉 if-else,使代码看起来更佳优雅。

    架构师修炼
  • 南京渣硕求职路(网易美团头条百度面经)+Java学习路线(拙见)

    首先自我介绍一下,楼主南京渣硕一枚,秋招主要投递JAVA后台岗位,面过以下公司:网易+美团+头条+百度+华为+中兴,拿下了网易和中兴提前批offer,华为依旧泡...

    Java架构技术
  • 一文带你彻底搞懂Java和JavaScript的区别与相似之处(纯干货建议收藏)

    Java是一种OOP(面向对象的编程语言)、基于类的、具有VM(虚拟机)平台的多平台编程语言。OOP 是一种基于包含代码和数据的对象概念的编程范式。虚拟机可帮助...

    海拥
  • 史上价格最高的数字货币Zcash

    写这篇文章的时候,比特币价格是4365美元一枚,是目前价格最高的数字货币,总额也是占全部数字货币将近5成,一直是数字货币中的大哥大。但是通过这段时间对Zcash...

    申龙斌

扫码关注云+社区

领取腾讯云代金券