`
qindongliang1922
  • 浏览: 2150552 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116423
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124683
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58608
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70469
社区版块
存档分类
最新评论

Scala里面如何使用枚举

阅读更多


枚举通常用来定义已知数量的常量,比如月份,星期,季节等等,用过java的人都知道定义枚举的关键字是enum,在scala里面和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来访问 。


此外还可以用枚举值做模式匹配:

    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,那么则需要另外的方式,这里就不展开了,有兴趣的朋友可以参考下面的链接:

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

有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics