枚舉一般用來定義已知數量的常量,好比月份,星期,季節等等,用過java的人都知道定義枚舉的關鍵字是enum,在scala裏面和java有所不一樣,來看一個完整的例子定義:java
object EnumTest { /*** * 定義一個星期的枚舉 */ object WeekDay extends Enumeration{ type WeekDay = Value //聲明枚舉對外暴露的變量類型 val Mon = Value("1") val Tue = Value("2") val Wed = Value("3") val Thu = Value("4") val Fri = Value("5") val Sat = Value("6") val Sun = Value("7") def checkExists(day:String) = this.values.exists(_.toString==day) //檢測是否存在此枚舉值 def isWorkingDay(day:WeekDay) = ! ( day==Sat || day == Sun) //判斷是不是工做日 def showAll = this.values.foreach(println) // 打印全部的枚舉值 } def main(args: Array[String]): Unit = { println(WeekDay.checkExists("8"))//檢測是否存在 println(WeekDay.Sun==WeekDay.withName("7"))//正確的使用方法 println(WeekDay.Sun=="7")//錯誤的使用方法 WeekDay.showAll //打印全部的枚舉值 println(WeekDay.isWorkingDay(WeekDay.Sun)) //是不是工做日 } }
上面的這個例子基本涵蓋了枚舉的全部經常使用方法,定義枚舉咱們繼承的是Enumeration抽象類,而後經過內部對象Value來賦值每個枚舉的值,此外裏面還定義了幾個工具方法,好比判斷是否存在某個枚舉,是不是工做日,以及打印全部的枚舉值,在使用的時候能夠直接經過Object來訪問 。工具
此外還能夠用枚舉值作模式匹配:this
val weekDay=WeekDay.Sun weekDay match { case WeekDay.Mon=> println("星期一") case WeekDay.Tue=> println("星期二") case WeekDay.Wed=> println("星期三") case WeekDay.Thu=> println("星期四") case WeekDay.Fri=> println("星期五") case WeekDay.Sat=> println("星期六") case WeekDay.Sun=> println("星期日") } //星期日
上面基本就是Scala裏面最多見的枚舉方法了,固然這種常見的枚舉有一些缺點,好比上面的這個模式匹配,若是我僅僅寫3個枚舉值,它編譯時候仍然能經過,但在運行的時候就會報錯,最後這種方式不能枚舉一個對象,只能簡單的類型,若是想枚舉的值,自己就是一個Bean,那麼則須要另外的方式,這裏就不展開了,有興趣的朋友能夠參考下面的連接:scala