zoukankan      html  css  js  c++  java
  • 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("星期日")
     
        }
    object EnumerationOps {
      def main(args: Array[String]): Unit = {
        val weekDay=WeekDay.Sun
        CalWeekDay(weekDay)
      }
    
      def CalWeekDay(day:WeekDay.Value):Unit = {
        day 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("星期日")
        }
      }
    
      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) // 打印所有的枚举值
      }
    
    }

     记住:CalWeekDay(day:WeekDay.Value) 参数类型是WeekDay.Value

  • 相关阅读:
    传统项目管理工具-scrum敏捷开发看板工具
    免费脑图软件
    项目管理软件收藏
    Scrum看板项目研发管理软件Leangoo- 阶段式游戏产品研发
    【Android开发日记】之入门篇(十二)——Android组件间的数据传输
    Android捕获崩溃异常
    【Android开发日记】之入门篇(十一)——Android的Intent机制
    Git的简单使用
    【Android开发日记】之入门篇(十)——Android应用配置文件解析
    【Android开发日记】之入门篇(九)——Android四大组件之ContentProvider
  • 原文地址:https://www.cnblogs.com/kpwong/p/14147768.html
Copyright © 2011-2022 走看看