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

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
分享到:
评论

相关推荐

    头歌Scala中集合的使用

    Scala中集合的使用 大学生 1. List 列表的使用 2. Set 集合的使用 3.Map 映射的使用 4. 元组的使用

    scala + mybatis 数据库查询

    通过使用Scala的Java互操作性,我们可以无缝地在Scala中使用MyBatis。 - 集成步骤通常包括添加MyBatis和其Scala绑定库到项目依赖,配置MyBatis的SqlSessionFactory,并编写Scala版的Mapper接口。 2. **Scala版的...

    scala实战高清讲解

    - 枚举与case类:Scala中的枚举和case类为模式匹配提供了便利,使代码更简洁、可读性更强。 - 解构:模式匹配允许对复合类型进行解构,提取出内部元素。 7. **特质(Traits)** - 特质是Scala的多重继承机制,...

    使用Scala进行Web开发:构建你的第一个Web应用.md

    使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发...

    mongo-scala-drive的使用demo

    在 Scala 中与 MongoDB 进行交互,通常我们会使用 `mongo-scala-driver`,而不是 `mongo-java-driver`,因为 Scala 驱动提供了更符合 Scala 语言特性的 API 设计。本示例将详细介绍如何使用 `mongo-scala-driver` ...

    scala3 scala3 scala3 scala3 scala3

    在Scala3中,你可以使用单表达式函数,而无需使用`=>`。例如,`x => x + 1` 可以直接写为 `(x) + 1`。此外,`def` 和 `val` 的定义现在可以合并,使得函数定义更加紧凑。 模式匹配的增强也是Scala3的重要特性。新的...

    Scala中使用JSON.toJSONString报错原因分析-解决方案.docx

    Scala 中使用 JSON.toJSONString 报错原因分析-解决方案 在 Scala 中使用 JSON.toJSONString 时,可能会出现ambiguous reference to overloaded definition错误,该错误的原因是由于 JSON.toJSONString 方法的重载...

    scala sdk scala-2.12.3

    通过学习和使用Scala SDK,开发者可以利用其丰富的语言特性来构建复杂的软件系统,尤其是在大数据处理、Web应用、云计算等领域,Scala已经展现出了强大的生命力。例如Apache Spark,一个流行的分布式计算框架,就是...

    scala 教程

    - 使用`foreach`和`for`枚举。 **第3章:Scala的下一步** - **进阶技巧**: - 带类型的参数化数组。 - 使用`List`。 - 使用`Tuple`。 - 使用`Set`和`Map`。 - 函数式编程风格。 - 文件读取。 **第4章:类和...

    jackson-module-scala3-enum:Jackson对Scala3枚举的支持

    杰克逊模块scala3-枚举 Jackson支持Scala3。 libraryDependencies += "com.fasterxml.jackson.module" %% "jackson-module-scala3-enum" % "2.12.0" import com.github.pjfanning.`enum`.EnumModule val mapper = ...

    Scala语法简明教程

    - Udemy上的《Scala and Akka Microservices》:教授如何使用Scala和Akka框架构建微服务。 - **社区与论坛**: - Scala官方网站([http://www.scala-lang.org](http://www.scala-lang.org/)):提供了大量的文档...

    scala-enum:基于密封类的 Scala 枚举的简单 40 行实现

    它使用反射,因此如果您使用它,您可能需要将libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaV到您的项目中。 对象的枚举 定义 sealed abstract class Color ( red : Double , green : Double...

    scala2.12.1Windows镜像包

    - **构建工具**:Scala项目通常使用sbt(Scala Build Tool)进行构建和管理,它可以自动化编译、测试和打包过程。 - **运行和调试**:在Windows环境下,可以通过命令行或IDE运行Scala程序,IDE还提供了调试功能,...

    scala API 操作hbase表

    在本文中,我们将深入探讨如何使用Scala API操作HBase数据库。HBase是一个分布式、面向列的NoSQL数据库,它构建于Hadoop之上,提供实时访问大量数据的能力。Scala是一种强大的函数式编程语言,与Java虚拟机(JVM)...

    scala-2.12.10.zip

    Scala的语法优雅且富有表达力,它允许开发者使用函数式编程的特性,如高阶函数、柯里化、模式匹配和不可变数据结构,同时保留了面向对象的类、接口和继承。这使得Scala成为处理大数据、并发和分布式计算的理想选择,...

    scala-2.12.10.tgz

    总的来说,`scala-2.12.10.tgz`是一个全面的Scala安装包,适合在Linux环境中学习和使用Scala语言,无论是初学者还是经验丰富的开发者,都能从中受益。通过深入学习和实践,开发者可以利用Scala的强大功能来构建高...

    Scala考试题1

    - Scala 使用 REPL(Read-Eval-Print Loop),Java 需要编译。 - Scala 有更强大的模式匹配,Java 需要使用 switch-case 或者 if-else。 15. **Java 集合与 Scala 集合的转换**: - 导入 `scala.jdk....

    Effective Scala中文版

    1. **类型系统**:Scala拥有强大的静态类型系统,包括类、特质、枚举、隐式转换等。理解这些类型系统对于编写安全、可靠的代码至关重要。书中会讲解如何充分利用这些特性来设计模块化的程序。 2. **模式匹配**:...

    学习scala好的项目

    通过这些资源,初学者可以逐步了解如何使用Scala编写Spark程序,包括如何创建SparkSession、加载数据、定义transformations和actions,以及如何使用DataFrame API进行复杂的数据操作。 此外,可能会涉及到的高级...

Global site tag (gtag.js) - Google Analytics