美文网首页
为什么我喜欢枚举(1)--语法糖而已

为什么我喜欢枚举(1)--语法糖而已

作者: 用一会再说 | 来源:发表于2019-03-09 17:07 被阅读0次

我开始喜欢枚举,就像喜欢你。

JAVA的枚举在JDK1.5开始引入,好用。

枚举,在数学上是指有穷序列集,就是说某一类东西,能一一列出来。比如月份,可以有一月、二月......十二月,不能再多了,星期也是一样的概念。先声明,如果只是简单的穷举,除了语义更明确,我没觉得用“枚举”来替代“一个接口定义几个常量”这种方式有什么其他优势,只有被穷举的对象有一定业务性导致其具有一定复杂性,枚举才体现其简约。

还是拿星期几这个有穷序列集来说。假设我们定义星期几具有英文名、中文名两个属性,还有一个表示这一天要干什么的操作方法。没有枚举之前我们也许是这样做的:

定义一个父类(这里我用抽象类)

public abstract class WeeKDay {
   protected String ename;
   protected String cname;
   public abstract void plan();
}

定义星期一

public class Monday extends WeeKDay {
    public Monday(String ename, String cname) {
        this.ename = ename;
        this.cname = cname;
    }
    @Override
    public void plan() {
        System.out.println("今天要做计划");
    }
}

定义星期二

public class Tuesday extends WeeKDay {
    public Tuesday(String ename, String cname) {
        this.ename = ename;
        this.cname = cname;
    }
    @Override
    public void plan() {
        System.out.println("今天要赶进度");
    }
}

定义星期三四五六日皆是如此,此处省略!有了定义之后我们来一一列举星期几这个有穷序列集。

public interface WeeKDayEnum {
    WeeKDay Monday = new Monday("Monday","星期一");
    WeeKDay Tuesday = new Tuesday("Tuesday","星期二");
    /**
     * 省略星期三四五六日
     */
}

如上加上我们省略掉的,要穷举星期几这样一个具有一定复杂性的有穷序列集,我们要写九个类,JAVA语法真啰嗦!有了枚举之后我们可以这样写:

public enum WeeKDayEnum2 {

    Mon("Monday","星期一"){
        @Override
        public void plan() {
            System.out.println("今天要做计划");
        }
    },Tues("Tuesday","星期二") {
        @Override
        public void plan() {
            System.out.println("今天要赶进度");
        }
    };
    /**
     * 此处省略三四五六日枚举
     */
    private String ename;
    private String cname;
    public abstract void plan();
}

只需要enum关键字定义一个类就可以代替上面的九个类,确实简约!事实上现实中的业务比星期几这个概念要复杂些,没有枚举的话可能还需要更多的类定义,比如星期几里面的计划,我们现在仅仅是简单地输出一句话而已。
以上便是JAVA枚举语法糖的一个优势,既然是语法糖,也就是说,只是看起来是这样子,事实上枚举定义编译后,也是被编译成了多个class。这个可以查看编译后的class文件就知道了!

javac -encoding utf-8 WeeKDayEnum.java
image.png

WeeKDayEnum.java被编译成了3个类(星期三四五六日代码被省略了,没写),可以看出,使用枚举能使我们减少类的定义,并且语义明确,使用面向对象的说法就是枚举实现了代码复用。

以上,网上到处是,但也是我一个个敲出来的,权当表达对枚举这一语义明确、高度复用的简约代码的喜爱,后续会补充我喜欢的用法。

简简单单多好!

相关文章

  • 为什么我喜欢枚举(1)--语法糖而已

    我开始喜欢枚举,就像喜欢你。 JAVA的枚举在JDK1.5开始引入,好用。 枚举,在数学上是指有穷序列集,就是说某...

  • Swift Enumeration(斯威夫特枚举)

    Swift Enumeration(斯威夫特枚举) 目录:1、Enumeration Syntax(枚举语法)2、...

  • Java基础系列-Enum深入解析

    原创文章,转载请标注出处:《Java基础系列-Enum深入解析》 一、概述 枚举就是一个语法糖效果。 定义一个枚举...

  • Day8 枚举(Enumerations)

    枚举(Enumerations)### ** 1、枚举语法** 使用 enum 关键词来创建枚举并且把它们的整个定...

  • JavaScript 语法糖 总结

    ## JavaScript 语法糖 作用 1.语法糖(Syntactic sugar),也译为糖衣语法。 2....

  • Swift语法糖的使用

    Swift语法糖的使用 语法糖的简介 语法糖Selector例子 语法糖的简介 我个人对语法糖的理解就是让你的代码...

  • 枚举

    枚举 本节内容包括: 枚举语法 匹配枚举值与switch语句 相关值 原始值 枚举语法 注意:不像 C 和 Obj...

  • Elixir-推导

    在 Elixir 中,列表推导是循环遍历枚举值的语法糖。 基础 推导经常用来根据 Enum 和 Stream生...

  • swift学习笔记三

    一、枚举 1.枚举语法 和C语言和Objectect语言不同,swift语言的枚举不提供默认的整型值多个枚举成员在...

  • 自定义button(链式语法)

    简单的撸一个demo,里面包含枚举、链式语法、语法糖。这是.h文件 .m文件 使用的时候: 只是一个很简单的dem...

网友评论

      本文标题:为什么我喜欢枚举(1)--语法糖而已

      本文链接:https://www.haomeiwen.com/subject/kqispqtx.html