枚举通常用来定义已知数量的常量,比如月份,星期,季节等等,用过java的人都知道定义枚举的关键字是enum,在scala里面和java有所不同,来看一个完整的例子定义:

object EnumTest {

  /***
* 定义一个星期的枚举
*/
object WeekDay extends Enumeration{
type WeekDay = Value //声明枚举对外暴露的变量类型
val Mon = Value("")
val Tue = Value("")
val Wed = Value("")
val Thu = Value("")
val Fri = Value("")
val Sat = Value("")
val Sun = Value("")
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(""))//检测是否存在 println(WeekDay.Sun==WeekDay.withName(""))//正确的使用方法 println(WeekDay.Sun=="")//错误的使用方法 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,那么则需要另外的方式,这里就不展开了

Scala里面如何使用枚举的更多相关文章

  1. 使用函数接口和枚举实现配置式编程(Java与Scala实现)

    概述 做报表时,有时需要根据不同的业务生成不同的报表.这样,需要能够动态地配置列字段,并根据列字段来输出对应的报表.使用函数接口结合枚举可以比较优雅地实现配置式编程. 问题描述如下: 假设有对象 St ...

  2. scala学习-类与对象

    类 / 对象 [<快学Scala>笔记] 一.类 1.Scala中的类是公有可见性的,且多个类可以包含在同一个源文件中: class Counter{ private var value ...

  3. Scala中 object 和 class的区别

    object 在scala中没有静态方法和静态字段,所以在scala中可以用object来实现这些功能,直接用对象名调用的方法都是采用这种实现方式,例如Array.toString.对象的构造器在第一 ...

  4. Scala快学笔记(二)

    一,基本概念 1,映射 Map与HashMap与TreeMap,SotredMap等区别: 1.HashMap键无序,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度 ...

  5. Scala基本语法学习笔记

      Scala语法与JAVA有很多相似的地方,两者也可以相互调用.但是整体感觉Scala语法等简洁.灵活.这里记录下Scala有特点的地方,以备以后查找方便.   参考: 使用 import: htt ...

  6. Scala 学习之路(八)—— 类和对象

    一.初识类和对象 Scala的类与Java的类具有非常多的相似性,示例如下: // 1. 在scala中,类不需要用public声明,所有的类都具有公共的可见性 class Person { // 2 ...

  7. Scala的常用小技巧

    1."RichString.java".stripSuffix(".java") == "RichString" "http:// ...

  8. Scala 系列(八)—— 类和对象

    一.初识类和对象 Scala 的类与 Java 的类具有非常多的相似性,示例如下: // 1. 在 scala 中,类不需要用 public 声明,所有的类都具有公共的可见性 class Person ...

  9. Scala_单例对象

    在 Scala 中,是没有 static 这个东西的,但是它也为我们提供了单例模式的实现方法,那就是使用关键字 object. 对象的无参构造器在第一次使用时被调用,且单例对象没有有残构造器. Enu ...

随机推荐

  1. 解决一起web 页面被劫持的案例

    现象 江西客户手机端连接wifi打开URL,页面上显示淘宝店铺广告,使用手机移动网络打开正常,其他地区正常. 二. 处理过程 初步分析:3g.club项目使用了CDN,目前只有江西异常,其他地区无异常 ...

  2. django rest framwork教程之外键关系和超链接

    此时,我们的API中的关系通过使用主键来表示.在本教程的这一部分中,我们将通过使用超链接来改善关系的内聚性和可发现性 为我们的API的根创建一个端点 现在我们有"snippets" ...

  3. PHP中常见问题总结

    [1]页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_ ...

  4. Mac下一款门罗币挖矿木马的简要分析

    背景 最近在应急中发现了一款Mac上的挖矿木马,目标是挖门罗币,经过走访,受害用户都有从苹果电脑上安装第三方dmg的经历(其中可以确定一款LOL Mac私服安装app会导致该木马),怀疑在网上很多第三 ...

  5. Mac - Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    在终端输入mysql,结果出现 macdeMacBook-Pro:~ mac$ alias mysql=/usr/local/mysql/bin/mysql macdeMacBook-Pro:~ ma ...

  6. Office2007 每次打开斗需要检查 【配置进度】

    打开C:\Program Files\Common Files\microsoft shared\OFFICE12\Office Setup Controller目录下将SETUP.EXE 重命名为 ...

  7. Spark2 jar包运行完成,退出spark,释放资源

    import org.apache.spark.sql.SparkSession import org.apache.spark.sql.Dataset import org.apache.spark ...

  8. web.xml之context-param,listener,filter,servlet加载顺序及其周边

    先以加载spring为例子看看加载顺序的作用: Spring加载可以利用ServletContextListener 实现,也可以采用load-on-startup Servlet 实现,但比如fil ...

  9. Linux下实现秒级定时任务的两种方案

    Linux下实现秒级定时任务的两种方案(Crontab 每秒运行): 第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command s ...

  10. [实战]MVC5+EF6+MySql企业网盘实战(2)——验证码

    写在前面 断断续续,今天算是把验证码的东东弄出来了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5 ...