Scala裏面如何使用枚舉

枚舉一般用來定義已知數量的常量,好比月份,星期,季節等等,用過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

http://pedrorijo.com/blog/scala-enums/code

相關文章
相關標籤/搜索