kotlin精讲-第3章(5)枚举类&印章类

作者: 739c8d412b4c | 来源:发表于2017-12-05 09:44 被阅读202次

    枚举类

    枚举定义

    现实生活中,说星期我们知道只有“星期一、星期二、星期三、星期四、星期五、星期六、星期日”七种情况。说扑克牌花色我们知道只有“黑桃、红心、樱花、方块”四种情况。说性别我们知道只有“男性、女性”。

    “星期”只有“星期一、星期二、星期三、星期四、星期五、星期六、星期日”七种情况。我们可以通过接口加常量定义的方式来表示,比如我们可以这样有如下定义,参考代码:

    public interface IWeek {
    
        String MON = "Mon";
    
        String TUE = "Tue";
    
        String WED = "Wed";
    
        String THU = "Thu";
    
        String FRI = "Fri";
    
        String SAT = "Sat";
    
        String SUN = "Sun";
    
    }
    

    Iweek的接口的特点是什么呢?就是一个类或者接口拥有有限的常量。如果一个类类或者接口拥有有限的常量,除了这样的定义方式,我们还可以选择用更为强大的枚举类。因为枚举类达到同样的限定效果之外,还提供了更多的方法和属性。

    枚举类通过enum关键字完成,enum关键字添加在class关键字的前面,枚举的基本结构如下:

    enum class Class{
       枚举常量1,枚举常量2,枚举常量3,枚举常量4
    }
    

    通常枚举常量使用大写字母表示。

    我们定义一个枚举类Week,参考代码:

    枚举类遍历&枚举常量常用属性

    关于枚举类,我们需要知道。枚举是可以很方面的进行遍历的。每一个枚举常量具有name属性和ordinal属性,name表示表示枚举常量的名字,ordinal表示枚举常量的顺序,顺序从0开始。参考代码:

    枚举类自定义属性

    我们知道,默认每一个枚举常量就带了一个name和ordinal的属性。我们还可以通过枚举类自定义属性,让每一个枚举常量携带更多的属性。而且kotlin更为方便,直接在主构函数里面,定义你想定义的其他属性即可,参考代码:

    印章类

    基本定义

    通过enum关键字可以定义一个枚举类,枚举类让一个类拥有了有限多个常量。通过sealed关键字,则可以定义一个印章类,印章类让一个类拥有了有限多个子类。印章类甚至可以理解为一个特殊的枚举类。印章类本身不能被实例化。

    现实生活中我们知道,四则运算包括加减乘除,如果把“加减乘除”定义为常量,我们可以用枚举实现。那如果,想把“加减乘除”定义成类,则可以用印章类。

    印章类的最简单结构如下:

    我们把“四则运算包括加减乘除”这样的情况,定义为一个印章类,参考代码:

    【代码清单-印章类1基本定义.kt】

    通过例子,我们看到了怎么去定义印章类。看到了印章类包含的类可以被实例化。印章类本身不能被实例化。

    分支操作

    但是上面的例子,并没有任何的实际意义。想用Add、Substract、Multiply、Divide做最基本的分支操作,我们还需要做如下的更改,参考代码:

    针对以上代码的第11行到14行,表示Add、Substract、Multiply、Divide继承至Operation,如果你有继承的概念,代码可以看到。如果,没有继承的概念,看完后面的继承相关的知识点,在回过来看这里。

    携带自定义属性

    进一步加大难度,印章类包含的有限的类还可以随意包含属性,我们把上面的逻辑进一步完善,参考代码:

    枚举和印章类都是可以完成分支操作的,枚举的常量也可以携带自定义的属性,印章类包含的类也可以携带自定义属性。但是,枚举常量携带的自定义属性,是固定不变量的。印章类包含的类携带的属性,则是可以交给外接灵活赋值的。

    作为了解,其实枚举类和印章类和when表达式配合起来,看着结构更清晰。when表达式我们后面再说,这里可以简单感受下。鼠标放在if关键字这里将得到如下提示,参考截图:

    m

    相关文章

      网友评论

        本文标题: kotlin精讲-第3章(5)枚举类&印章类

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