枚举通常用来定义已知数量的常量,比如月份,星期,季节等等,用过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),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
分享到:
相关推荐
Scala中集合的使用 大学生 1. List 列表的使用 2. Set 集合的使用 3.Map 映射的使用 4. 元组的使用
杰克逊模块scala3-枚举 Jackson支持Scala3。 libraryDependencies += "com.fasterxml.jackson.module" %% "jackson-module-scala3-enum" % "2.12.0" import com.github.pjfanning.`enum`.EnumModule val mapper = ...
它使用反射,因此如果您使用它,您可能需要将libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaV到您的项目中。 对象的枚举 定义 sealed abstract class Color ( red : Double , green : Double...
最新制作 scala 2.13.3 API 文档 Html离线版 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。
scala-2.12.3 scala-2.12.3 scala-2.12.3 scala-2.12.3
Scala中使用JSON.toJSONString报错原因分析-解决方案.docx
这是一个简单实用的scala集成mybatis数据库查询代码,简单明了
此文档是讲解实战Scala,...本书面向实际的使用场景,提供了大量的Scala实例,同时,也给出底层的原理和相关的参考。对于Scala新手来说这是一本不错的入门书,对于老手来说也是一本夯实基础,检视自己所学知识的好书。
scala 编译工具 sbt 安装包。 Little or no configuration required for simple projects Scala-based build definition that can use the full flexibility of Scala code Accurate incremental recompilation ...
很大篇幅都放在,使用scala实现scala默认库文件的API中,通过对简单的函数式编程逻辑的介绍和实践,主要是实践,建立起来一个比较明晰的scala思维模式,或者叫函数式编程的思维模式。 2 无副作用的函数式编程,同时...
Scala语法简明教程.pdf
scala 编程思想 书籍中的源码,免费下载供大家使用
scala练习使用Scala统计每日新增最多的城市 统计未支付的订单数量词频统计
scala eclipse插件 拷贝到相应的目录即可使用,百度一大堆
基于最新的scala-mongo-driver使用scala操作mongo数据库,不是mongo-java-driver,网上很多教程都是基于java的不是mongo的,研究两天才知道咋用,一起学习哇
最近看了hbase的源码根据源码写了一些scala调动hbase表的API,话不多说直接上代码!Hadoop的版本是2.7.3,scala版本是2.1.1,hbase的版本是1.1.2 如果版本不同可以修改pom的依赖项,但要注意版本冲突。 并且在scala...
scala2.12.1Windows镜像包
欢迎使用Cookbook-grpc-scala! 缴费政策 他们的原始作者很高兴接受通过GitHub拉取请求进行的贡献。 连同任何请求请求一起,请声明贡献是您的原始工作,并且您已根据项目的开源许可证将工作许可给该项目。 不论您...