枚举通常用来定义已知数量的常量,比如月份,星期,季节等等,用过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. 元组的使用
通过使用Scala的Java互操作性,我们可以无缝地在Scala中使用MyBatis。 - 集成步骤通常包括添加MyBatis和其Scala绑定库到项目依赖,配置MyBatis的SqlSessionFactory,并编写Scala版的Mapper接口。 2. **Scala版的...
- 枚举与case类:Scala中的枚举和case类为模式匹配提供了便利,使代码更简洁、可读性更强。 - 解构:模式匹配允许对复合类型进行解构,提取出内部元素。 7. **特质(Traits)** - 特质是Scala的多重继承机制,...
使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发...
在 Scala 中与 MongoDB 进行交互,通常我们会使用 `mongo-scala-driver`,而不是 `mongo-java-driver`,因为 Scala 驱动提供了更符合 Scala 语言特性的 API 设计。本示例将详细介绍如何使用 `mongo-scala-driver` ...
在Scala3中,你可以使用单表达式函数,而无需使用`=>`。例如,`x => x + 1` 可以直接写为 `(x) + 1`。此外,`def` 和 `val` 的定义现在可以合并,使得函数定义更加紧凑。 模式匹配的增强也是Scala3的重要特性。新的...
通过学习和使用Scala SDK,开发者可以利用其丰富的语言特性来构建复杂的软件系统,尤其是在大数据处理、Web应用、云计算等领域,Scala已经展现出了强大的生命力。例如Apache Spark,一个流行的分布式计算框架,就是...
- 使用`foreach`和`for`枚举。 **第3章:Scala的下一步** - **进阶技巧**: - 带类型的参数化数组。 - 使用`List`。 - 使用`Tuple`。 - 使用`Set`和`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 = ...
- Udemy上的《Scala and Akka Microservices》:教授如何使用Scala和Akka框架构建微服务。 - **社区与论坛**: - Scala官方网站([http://www.scala-lang.org](http://www.scala-lang.org/)):提供了大量的文档...
它使用反射,因此如果您使用它,您可能需要将libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaV到您的项目中。 对象的枚举 定义 sealed abstract class Color ( red : Double , green : Double...
- **构建工具**:Scala项目通常使用sbt(Scala Build Tool)进行构建和管理,它可以自动化编译、测试和打包过程。 - **运行和调试**:在Windows环境下,可以通过命令行或IDE运行Scala程序,IDE还提供了调试功能,...
在本文中,我们将深入探讨如何使用Scala API操作HBase数据库。HBase是一个分布式、面向列的NoSQL数据库,它构建于Hadoop之上,提供实时访问大量数据的能力。Scala是一种强大的函数式编程语言,与Java虚拟机(JVM)...
Scala的语法优雅且富有表达力,它允许开发者使用函数式编程的特性,如高阶函数、柯里化、模式匹配和不可变数据结构,同时保留了面向对象的类、接口和继承。这使得Scala成为处理大数据、并发和分布式计算的理想选择,...
- Scala 使用 REPL(Read-Eval-Print Loop),Java 需要编译。 - Scala 有更强大的模式匹配,Java 需要使用 switch-case 或者 if-else。 15. **Java 集合与 Scala 集合的转换**: - 导入 `scala.jdk....
1. **类型系统**:Scala拥有强大的静态类型系统,包括类、特质、枚举、隐式转换等。理解这些类型系统对于编写安全、可靠的代码至关重要。书中会讲解如何充分利用这些特性来设计模块化的程序。 2. **模式匹配**:...
通过这些资源,初学者可以逐步了解如何使用Scala编写Spark程序,包括如何创建SparkSession、加载数据、定义transformations和actions,以及如何使用DataFrame API进行复杂的数据操作。 此外,可能会涉及到的高级...
对于使用Scala进行大数据处理,首先需要安装Spark,然后可以使用Scala API创建Spark程序。Spark提供了SparkContext(SC)作为与集群交互的主要入口点,以及DataFrame和Dataset等高级接口,使得开发人员能够高效地...
这部分会讲解如何使用List、Set、Map等集合,以及如何进行集合操作,如映射、过滤、折叠等。此外,还会涉及Option和Either等类型,它们是处理可能的null值和错误的良好工具。 接着,"Scala进阶之路-part03-面向对象...