![d457a65764b610c721146d4a99731a7e.png](https://i-blog.csdnimg.cn/blog_migrate/c8850d1e13b01765a82c37400c3619b7.jpeg)
scala枚举
枚举:Scala不支持enum关键字,通过继承Enumeration类实现枚举
枚举通常用来定义已知数量的常量,比如月份,星期,季节等等
定义一个星期的枚举
![0e09fc2268a9351a1a0d6f9d76c17913.png](https://i-blog.csdnimg.cn/blog_migrate/9537b84d0749347460bfea7db7f56877.jpeg)
并定义一个打印所有值的方法
![f8f4f4b6e667a38e28102a96f6a0652f.png](https://i-blog.csdnimg.cn/blog_migrate/6eda7e25c9dce0ffa0c10c974f2cf127.jpeg)
我们调用运行看一下,直接打印的枚举中的变量值
![26e325c837a4e94a6414b42ffc4c6bb2.png](https://i-blog.csdnimg.cn/blog_migrate/ba0f28730cc4fe15fa6c9ebfc1cf25b9.jpeg)
打印语句可以简化
![6bb06a1331acb96bf6f5d4d55dd3e244.png](https://i-blog.csdnimg.cn/blog_migrate/dd9532f662ade428b544dd1d81091dfd.jpeg)
调用
![b80632c4b60a36764cf5c20a2d489702.png](https://i-blog.csdnimg.cn/blog_migrate/9d810b0447a396ab8935eb156a40cbc7.jpeg)
我们看输出的值
![983ee33101c60c383125a6cbe01d6058.png](https://i-blog.csdnimg.cn/blog_migrate/c1e0912c372af70d5cd3eb2bcf7b7b93.png)
可以直接调用枚举值
![0cc4315436066d12fb518e4369a3eb12.png](https://i-blog.csdnimg.cn/blog_migrate/5949d6cf0d43db8c184c5558cca335dd.png)
withName也可以直接获取
![cd1c3bd579f70c6d120f36772e8c89a7.png](https://i-blog.csdnimg.cn/blog_migrate/5fb926d5f8d83ce64330f48af0f71b0e.jpeg)
有一个id 的属性
![176758880307680ce4b9648cae561f01.png](https://i-blog.csdnimg.cn/blog_migrate/5fd2a1a47c2137577754420c7c4ec997.jpeg)
toString
![930ddc0d96f97e80133fd18c70fe3db1.png](https://i-blog.csdnimg.cn/blog_migrate/735e61609b85ea6db39eaa9805708bcf.jpeg)
直接通过下标
![0eb0b663db92b8b045d5441c83ae8c8d.png](https://i-blog.csdnimg.cn/blog_migrate/f90320f6b29e6d0d08dd5b05f67d36dc.jpeg)
如果我们改变Tue的值,查看id的变化,就能发现id的值会改变,后面使用的值id也发生了变化
![faef025404efbfc4bb3bf286a37fffac.png](https://i-blog.csdnimg.cn/blog_migrate/6a22ed9135a9a22d78070066d48fb7fe.jpeg)
总结上面说明:
枚举值 说明
Enum.Mon 获取枚举值
Enum.Mon.id 获取枚举值ID
Enum.Mon.toString 获取枚举值名称
Enum.values.values 返回所有的枚举值的集合
Enum(2) 通过 id 获取枚举值(调用Enumeration.apply)
Enum.withName("2") 通过名称获取枚举值
有一些简单的用法
检测是否存在此枚举值
def checkExists(day:String) = this.values.exists(_.toString==day)
判断是否是工作日
def isWorkingDay(day:WeekDay) = ! ( day==Sat || day == Sun)
![fee2926edd130ac18a440061c19b09a7.png](https://i-blog.csdnimg.cn/blog_migrate/a4beea5874fc78d6b7874a08a9f663aa.jpeg)
调用
![09baabb94a7d3df128316bed9cbffaf4.png](https://i-blog.csdnimg.cn/blog_migrate/09eaf6d6643e01e81f7da16f9a0c311d.jpeg)
注意这种使用
![b702be93ebd78462e935b51d90ff5333.png](https://i-blog.csdnimg.cn/blog_migrate/9f44d51f7da73b745cdc066d341b6f36.png)
case class
Scala中一种特殊的class,叫做 case class
case class就是class和object的一个整合,在编译的过程中会自动的生成class和object的相关代码,并且在object中生成一个和class主构造函数同参数列表的apply方法,可以简化写object的过程
case class中默认的属性修饰符为 public val ,但是可以改变的,跟普通函数的定义是一样的,没有区别
case class中的属性最多允许22个,跟元组中是一样的
一般比较常用于模式匹配
用法简单示例
![023360319140f5cb1266c2adf8f2e9d7.png](https://i-blog.csdnimg.cn/blog_migrate/c43b4bafd7583b507fa2a1ccd018c582.png)
![cea5acde7d5acb32bf5a185f5266938c.png](https://i-blog.csdnimg.cn/blog_migrate/b27c5971fcd4b952d4d960f24fcd9fd7.png)
trait(特质)
scala中没有interface的概念,一般情况我们把trait当作Java的接口来使用
区别:
1. trait可以包含已经实现的方法或者属性(特质和接口的区别)
2. 和抽象类相比,一个类可以继承或者实现多个trait(特质和抽象类的区别)
scala中的class是单继承的,和Java一样,一个class的父类只有一个但是可以实现多个trait
trait是多继承的
scala中不支持implements关键字,使用extends和with管理继承/实现的代码逻辑
extends表示继承或者实现
with用于多trait的继承过程中
示例一:
![af943e2565c78fb73a1ce816751246a6.png](https://i-blog.csdnimg.cn/blog_migrate/7e01482ac205b42e2a3e8de758187136.jpeg)
![981a563120659def1b650830b5b66762.png](https://i-blog.csdnimg.cn/blog_migrate/4707e71cf1b2b57742dd0597f4b66241.jpeg)
![8fe37e08c86ff8c3ec955e0a633e7535.png](https://i-blog.csdnimg.cn/blog_migrate/97a3c8ca2fa6eeb10ce384edb096db80.jpeg)
示例二:
![635571ca22f6e843c12584076970ac16.png](https://i-blog.csdnimg.cn/blog_migrate/5efa4169681228e90b3300194dc3ed67.jpeg)
![27af7695f37c5bdbbe169564e489dd5d.png](https://i-blog.csdnimg.cn/blog_migrate/628bd9d3149b94cdf9a57356fca346fc.jpeg)
示例三:
![fe431166528144280f2d450791310214.png](https://i-blog.csdnimg.cn/blog_migrate/0e80a7bdd52a094c475dcd8c678fdeb4.jpeg)
![e1d4b770b3dedae33edf9b36bd9293ff.png](https://i-blog.csdnimg.cn/blog_migrate/0d46bed3f59ed10dea137bc94662d8fa.jpeg)
![0093a889958520b82b6eedb95b70aff4.png](https://i-blog.csdnimg.cn/blog_migrate/ebed8395f0dca7e3852307b3b1d9072b.jpeg)