枚举类
枚举定义
现实生活中,说星期我们知道只有“星期一、星期二、星期三、星期四、星期五、星期六、星期日”七种情况。说扑克牌花色我们知道只有“黑桃、红心、樱花、方块”四种情况。说性别我们知道只有“男性、女性”。
“星期”只有“星期一、星期二、星期三、星期四、星期五、星期六、星期日”七种情况。我们可以通过接口加常量定义的方式来表示,比如我们可以这样有如下定义,参考代码:
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
网友评论