博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java高级特性之枚举学习总结
阅读量:3660 次
发布时间:2019-05-21

本文共 1812 字,大约阅读时间需要 6 分钟。

相信很多小伙伴,在实际开发中也是那么干的,既然这样已经能实现枚举的功能,为什么还要引入枚举呢?我们接着往下看当我们需要是同这组“int枚举”是代码如下
public void showSex(int sex){
     switch(sex){
        case MAN:
           System.out.println("this is a boy");   
        break;    
        case WOMAN:
           System.out.println("this is a Girl");   
        break; 
      } 
}
看起来这些貌似也没什么问题,但是我们知道,一个项目基本都是基于团队开发,或许只有你自己知道int类型的1代表gril,0代表Boy。其他同事看到这个函数根本不知道其中的含义,这样的代码很明显阅读性很差,从而会造成沟通成本很高。我们接着往下看,现在你为你的func写了很nice的注释,傻子都能看得懂(0 boy,1 gril)。但是项目组不可避免的总会出现那么一两个傻子,非要给你传个3进来,而且这样的错误编译器不会报任何错误,运行时会造成什么bug,这个只有乔老爷知道了。所以这样的代码是极不安全的。使用枚举就能很好的避免上面的问题,接下来我们就来理一理枚举的用法。
枚举用于存储数量有限的一组固定的数据集。使用场景:上面说到的性别的表示,一年四级春夏秋冬的表示,一周七天的表示,颜色的表示等等。
枚举的简单用法
 // 普通枚举
 public enum ColorEnum {
        white, red, green, blue;
 }
    /**
     * 
     * 枚举中有一个自带的静态方法values(),返回enum实例的数据并且该数组中的元素顺序和声明时的顺序一样 
     * 枚举也可以像普通的类一样可以添加属性和方法,可以为它添加静态和非静态的属性或方法
     */
    public enum SeasonEnum {
        //注:枚举写在最前面,否则编译出错
        spring, summer, autumn, winter;
        private final static String position = "test";
        public static SeasonEnum getSeason() {
            if ("test".equals(position))
                return spring;
            else
                return winter;
        }
    }
     /**
     * 带构造器的枚举
     * 必须带有一个参构造器和一个属性跟方法,否则编译出错
     * 
     */
    public enum Mode {
        PULLDOWN("下拉"), PULLUP("上拉");
        private final String value;
        /**
         * 构造器默认也只能是private, 从而保证构造函数只能在内部使用
         * 
         */
        private Mode(String value) {
            this.value = value;
        }
        public String getValue() {
            return value;
        }
    }
枚举中还有一个ordinal()方法返回一个int值,这是每个enum实例在声明时的次序,从0开始。枚举类还实现了Compareable接口,所以他具有compareTo()方法。同时还实现了Serializable接口,还自动为你提供了equals()和hashCode()方法。除了不能继承一个枚举类之外,我们基本上可以把枚举类当成一个常规的Java类,可以往其中添加新的方法,包括抽象方法甚至main方法。
现在我们用枚举来实现上面的那个性别函数
public enum EnumSex {
        MAN, WOMAN
    }
    public static void showSex(EnumSex EnumSex) {
        switch (EnumSex) {
        case MAN:
            System.out.println("this is a boy");
            break;
        case WOMAN:
            System.out.println("this is a girl");
            break;
        }
    }
    public static void main(String[] args) {
        showSex(EnumSex.MAN);
        // showSex(EnumSex.Renyao) 编译报错
    }
这样既有很好的阅读性又避免的安全性问题

转载地址:http://quafn.baihongyu.com/

你可能感兴趣的文章
Centos7安装算法环境Anaconda+scipoptsuite-7.0.2
查看>>
Jenkins迁移后构建失败
查看>>
linux中的ip命令
查看>>
redis缓存穿透解决方案
查看>>
各数据库远程连接及ipv6环境配置
查看>>
linux常用命令
查看>>
设计模式
查看>>
一个汉字到底占几个字节
查看>>
项目支持多数据库
查看>>
mybatis
查看>>
linux之oracle建库建表
查看>>
HTML页面input回车自动提交表单问题
查看>>
数据库知识导航
查看>>
nginx部署
查看>>
Spring Cloud Alibaba——转载自楠哥
查看>>
Mybatis+pageHelper实现兼容多数据库
查看>>
Springboot + slf4j日志
查看>>
HA(High Availability高可用性)
查看>>
RDP远程
查看>>
各数据库对比
查看>>